移动端兼容测试

很多人觉得测试没有什么技术含量 简单枯燥

在初期阶段看起来是这样的 但事实真的如此么 那些潜移默化中积累下的方法论与世界观

没做过测试的开发永远不会懂 ?

 

最近做了两件挺有意思的事

一件是移动端深度兼容测试的实践

一件是UI自动化获取淘口令并模拟登陆更新到服务端

 

移动端深度兼容测试

依赖:Uiautomator2  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自动化获取淘口令并模拟登陆更新到服务端

 

背景:淘宝分享出来的商品淘口令有效期不足两小时,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 session 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等)做深度兼容的费用,且可以做得更细致出现问题也更方便定位

事件二节省了开发资源,业务响应也更及时些

 

测试并不是那么无趣,我们可以做到更多~

 

转载于:https://www.cnblogs.com/maple42/p/8865476.html

你可能感兴趣的:(移动端兼容测试)