Airtest+Poco+Pytest框架搭建1

George555     公众号:测试江湖路

如果这些内容对你有帮助,也可以打开微信扫一扫,加关注:

    好多同学在问Airtest写的用例怎么管理,怎么执行,官方用了unittest做了二次封装来处理,而笔者经过实践,换用了pytest,感觉写起用例能飞起来~

    接下来就写下用pytest来组织用例的思路方法。如果你还不会pytest使用,请进入下面的传送门>>>

    python-pytest使用(1)-基础

    python-pytest使用(2)-fixture

    python-pytest使用(3)-conftest

    python-pytest使用(4)-多线程多进程运行

1.接入pytest框架设计出发点:

    A.框架简单易用,易上手

    B.大部分代码方法来源于官网方法,免去自己框架约束的学习成本

    C.可选择性执行用例

    D.可并发执行用例

2.先看看目录结构设计思路

Airtest+Poco+Pytest框架搭建1_第1张图片

 

    A.根目录的3个文件:总方法main.py、conftest.py、pytest.ini

    main方法很简单,主要是调用pytest命令来执行所有用例,代码如下:

import pytestif __name__ == '__main__':    pytest.main(['-s'])   #顺序执行#     pytest.main(['-n=2'])  #多进程并发

    根目录放conftest.py的目的是在这里做所有airtest和poco的初始化对象。

import pytest,osfrom airtest.core.api import *from poco.drivers.android.uiautomation import AndroidUiautomationPocofrom poco_test.utils.util import *@pytest.fixture(scope='function', params=(getConnectDevices()),name='newpoco')def poco(request):#    '''poco对象预设值    @return: 返回poco对象,用newpoco代替'''    connect_device(request.param['uri'])    newpoco=AndroidUiautomationPoco(device=device())    start_app(GS.packageName)    sleep(10)    yield newpoco    sleep(3)    stop_app(GS.packageName)    sleep(3)@pytest.fixture(scope='function', params=(getConnectDevices()),name='newAirtest')def airtest(request,initEnv):#    '''airtest对象预设值'''    connect_device(request.param['uri'])        start_app(GS.packageName)    sleep(10)    yield     sleep(3)    stop_app(GS.packageName)    sleep(3)

    备注:目前由于airtest对于跨设备的截图识别存在兼容问题还在摸索中,这里先加入初始化待用。

    根目录放pytest.ini,目的是简化main方法执行参数,以及用例可按mark标记执行

[pytest]marker =   smokeTest  functionTest#addopts = -v -s --reruns 3 --reruns-delay=3 --html=.\\report\\testreport.html

B.用例创建

    这里需要创建两大块airtest和poco用例,用于匹配两大框架。用例总目录为air_test、poco_test。而在这里用例设计方式借用之前用过的robotframework中思路,按照测试集-测试用例的方式管理。

Airtest+Poco+Pytest框架搭建1_第2张图片

    如图中test_suite5_my的测试集下包含test_login和test_myConcern两个py测试文件,而这两个测试文件中分别有自己模块功能下的测试用例。(因为前提是使用pytest执行用例,那么它将会寻找项目目录下所有符合规则的test_开头的py文件去执行里面的测试方法。)

    用例文件创建好了之后,那么用例该怎么写呢?下面给出test_myConcern文件中的测试用例代码

'''Created on 2019年9月27日@author: George测试点:我的关注'''import pytestfrom poco_test.utils.util import *LOGGER=get_logger(__name__)class TestMyAttention():    def test_001_clickMyAttention(self,newpoco):        LOGGER.info('执行test_002_clickMyAttention::点击-我的关注,检查QQ登录按钮')        newpoco(text='我的').click(sleep_interval=3)        newpoco(text='我的关注').click(sleep_interval=3)        qqLoginLabel=newpoco(text='QQ登录').get_text()        assert qqLoginLabel=='QQ登录','未找到QQ登录的标签'  if __name__ == '__main__':    pytest.main(['-s',__file__])

    此代码可以单独运行,只运行当前py文件。也可以在根目录直接运行main方法,运行全部项目测试用例。

    上面这些内容总体来说已经完成了poco结合pytest的项目环境搭建,再梳理下思路:

    1.在根目录的conftest里面做poco的初始化动作,保证app可以打开,并返回poco对象

    2.在编写用例时,只需要传入1中的poco对象,就不需要在每个用例中去连接、打开app、生成poco对象等操作了。

    3.用例编写成功后,执行main方法,去执行全部项目用例,执行前去pytest.ini配置文件中找执行参数和执行的marker标签名(用例前面需要声明marker标签)。

    4.最后生成测试报告,如图:

 

    今天先写到这里,这个框架只是个简单示例,做为一种思路的分享,后面还需要加入更多功能,大家可以自由发挥。

    比如:兼容Android、ios、win、web平台的初始化;对官方部分方法做2次封装更适用自己;报告的优化引入allure;测试数据分离等。

    后面内容更新请持续关注。

 

 

 

#####欢迎大家加群交流####

QQ:464314378

微信群请先加群主微信,群主会拉各位小伙伴进群,注意添加备注。

 

 

你可能感兴趣的:(Airtest)