モバイル互換性テスト
7146 ワード
多くの人はテストが技術的な含有量がなくて簡単で退屈だと思っています.
初期段階ではそう見えますが、事実は本当にそうですか.潜在的な暗黙化の中で蓄積された方法論と世界観
テストをしたことがない開発は永遠に理解できませんか?
最近おもしろいことを2つしました.
1つは、モバイルエンドの深さ互換性テストの実践です.
1つは、UIが自動化してパスワードを取得し、ログインをシミュレーションしてサービス側に更新することです.
モバイルエンドの深度互換性テスト
依存:Uiautomator 2 Atx
threadマルチスレッドによる同時実行
効果:http://video.ivwen.com/users/3011/B03BED79-6A83-4A5C-A3BE-EE21DDDD5010.mp4
UIは自動的にパスワードを取得し、ログインをシミュレートしてサービス側に更新する
背景:淘宝が共有した商品淘パスワードの有効期限は2時間未満で、sdkが淘パスワードAPIを取得するにはアリママの協力サイトの登録プロセスのコストが高い.
すでに実装されている手動でパスワードを更新する機能に基づいて、UIでパスワードを取得し、ログイン更新パスワードをサービス側にシミュレートしてみます.
UI操作方法
パスワードの抽出方法
シミュレーションは使用可能なPHPセッションIDを登録して取得します.注MozillaCookieJarはsave()メソッドがありますが、デフォルトではありません.
パスワードメソッドの更新
最後の呼び出しメソッド実装
イベントを始めると、サードパーティメーカー(Wetest、Testinなど)の深い互換性のある費用を減らすことができ、より細かく問題が発生し、位置決めが容易になります.
イベント2は開発資源を節約し、ビジネス応答もよりタイムリーに
テストはそんなに面白くないわけではありません.私たちはもっとできます.
転載先:https://www.cnblogs.com/maple42/p/8865476.html
初期段階ではそう見えますが、事実は本当にそうですか.潜在的な暗黙化の中で蓄積された方法論と世界観
テストをしたことがない開発は永遠に理解できませんか?
最近おもしろいことを2つしました.
1つは、モバイルエンドの深さ互換性テストの実践です.
1つは、UIが自動化してパスワードを取得し、ログインをシミュレーションしてサービス側に更新することです.
モバイルエンドの深度互換性テスト
依存:Uiautomator 2 Atx
threadマルチスレッドによる同時実行
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import thread
from unittest import TestCase
# python unittest
import unittest
# time.sleep(xx)
import time
import atx
import random
import string
import json
import uiautomator2 as ut2
#
def print_time(threadName, delay):
count = 0
while count < 10:
time.sleep(delay)
count += 1
print "%s: %s" % (threadName, time.ctime(time.time()))
def tcp_connection (device):
return
def randomchar_gen(length):
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, length))
return ran_str
def thread_go(device):
d = ut2.connect(device)
#d.unlock()
d.app_stop_all()
d.unlock()
d.app_start('com.lanjingren.ivwen')
time.sleep(3)
d(resourceId='com.lanjingren.ivwen:id/maintab_add').click_exists(15) #
d(resourceId="com.lanjingren.ivwen:id/id_item_select", className="android.widget.ImageView", instance=1).click_exists(10) #
d(resourceId="com.lanjingren.ivwen:id/id_item_select", className="android.widget.ImageView", instance=3).click_exists(10) #
d(resourceId="com.lanjingren.ivwen:id/tv_actionbar_right_text").click_exists(10) #
d(resourceId="com.lanjingren.ivwen:id/rl_edit_title").click_exists(10) #
str_title=randomchar_gen(8)
d(resourceId="com.lanjingren.ivwen:id/edit").send_keys(str_title) #
d(resourceId="com.lanjingren.ivwen:id/tv_actionbar_right_text").click_exists(3) #
d(resourceId="com.lanjingren.ivwen:id/tv_actionbar_right_text").click()
#time.sleep(2)
d(resourceId="com.lanjingren.ivwen:id/button_theme").click() #
d(resourceId="com.lanjingren.ivwen:id/imageView", className="android.widget.ImageView", instance=2).click()#
d(resourceId="com.lanjingren.ivwen:id/text_confirm").click()#
#d(className="android.widget.LinearLayout", instance=13).click()
#time.sleep(2)
d(textContains=' ').click()
#d(textContains=' ').up()
#d(resourceId="com.lanjingren.ivwen:id/button_comment").click
#time.sleep(2)
d(text=' ').click()
time.sleep(5)
try:
thread.start_new_thread(thread_go, ("192.168.0.166:7912",))
thread.start_new_thread(thread_go, ("192.168.0.32:7912",))
thread.start_new_thread(thread_go, ("192.168.0.242:7912",))
except:
print "Error: unable to start thread"
while 1:
pass
# #
# try:
# thread.start_new_thread(print_time, ("Thread-1", 2,))
# thread.start_new_thread(print_time, ("Thread-2", 4,))
# except:
# print "Error: unable to start thread"
#
# while 1:
# pass
効果:http://video.ivwen.com/users/3011/B03BED79-6A83-4A5C-A3BE-EE21DDDD5010.mp4
UIは自動的にパスワードを取得し、ログインをシミュレートしてサービス側に更新する
背景:淘宝が共有した商品淘パスワードの有効期限は2時間未満で、sdkが淘パスワードAPIを取得するにはアリママの協力サイトの登録プロセスのコストが高い.
すでに実装されている手動でパスワードを更新する機能に基づいて、UIでパスワードを取得し、ログイン更新パスワードをサービス側にシミュレートしてみます.
UI操作方法
global d
def UIoperation(self):
d = ut2.connect('192.168.0.166:7912')
d.app_stop_all()
d.unlock()
d.app_start('com.taobao.taobao')
time.sleep(8)
d(resourceId="com.taobao.taobao:id/iv_nav_icon", className="android.widget.ImageView", instance=3).click()
d(text=u" ").click()
time.sleep(5)
d(description=u" ").click()
time.sleep(5)
#d(className="android.support.v7.app.ActionBar$Tab", instance=1).click()
#d(className="android.widget.ImageView", instance=14).click()
d.click(0.265, 0.873)
d(resourceId="com.taobao.taobao:id/uik_public_menu_action_icon").click()
d(resourceId="com.taobao.taobao:id/uik_public_menu_item_title", text=u" ").click()
d(resourceId="com.taobao.taobao:id/target_item_image").click()
text = d(resourceId="com.taobao.taobao:id/taopassword_alert_title").get_text()
time.sleep(3)
return text
パスワードの抽出方法
def getCode(self,str):
utf8string = str.encode("utf-8")
list = re.split(' ', utf8string)
str = list[1]
list2 = re.split(' ', str)
code = list2[0]
return code
シミュレーションは使用可能なPHPセッションIDを登録して取得します.注MozillaCookieJarはsave()メソッドがありますが、デフォルトではありません.
def getSession(self):
filename = 'cookie.txt'
cookie = cookielib.MozillaCookieJar(filename)
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
req = urllib2.Request("http://baidu.com/login.php",
urllib.urlencode({"account": " ", "pwd": " "}))
response = opener.open(req)
# cookie
# ignore_discard, cookie
# ignore_expires, cookie ,
cookie.save()
for ck in cookie:
# print ck.name, ':', ck.value
if ck.name == 'PHPSESSID':
return ck.value
パスワードメソッドの更新
def updateH5(self, ss, code):
url = 'http://baidu.com/zhi.php?a=h5'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9'
}
postdata = {' ': '1', ' ': code}
cookies = dict(PHPSESSID= ss)
session = requests.Session()
session.cookies = cookielib.CookieJar()
result = session.post(url, data=postdata, headers=headers, cookies=cookies)
最後の呼び出しメソッド実装
if __name__ == "__main__":
o = CodeGenerator()
#string ="【【 】 3 110 】, ¥i7TC0IP3A2q¥ ? ?"
#taocode = o.getCode(string)
#print taocode
tao = o.UIoperation()
code = o.getCode(tao)
print code
ss = o.getSession()
o.updateH5(ss, code)
イベントを始めると、サードパーティメーカー(Wetest、Testinなど)の深い互換性のある費用を減らすことができ、より細かく問題が発生し、位置決めが容易になります.
イベント2は開発資源を節約し、ビジネス応答もよりタイムリーに
テストはそんなに面白くないわけではありません.私たちはもっとできます.
転載先:https://www.cnblogs.com/maple42/p/8865476.html