pytest allure测试报告_Appium+pytest+allure+jenkins如何实现多台手机连接

本文介绍了如何使用pytest、allure、Appium和Jenkins实现多台手机的自动化测试。通过参数化fixture和pytest的allure插件,可以依次连接和运行测试用例在不同设备上,但并非真正意义上的并行执行。文章详细阐述了配置修改、设备信息管理以及appium-server的启动方法,并展示了allure测试报告的详细内容和趋势分析。
摘要由CSDN通过智能技术生成

ed071eae18cbe6aee9044b1b589de703.png

很多人可能想到的是多线程(threading)。

今天分享一种比多线程更简单的方法,虽然不是多台手机同时运行,但可以连接多台手机依次运行。

大致的运行方式是:001号测试用例:A手机,B手机...,002号测试用例:A手机,B手机...

环境准备

appium的安装:adt,nodejs,appium的python库,appium server pytest的安装:pytest allure的安装:allure的python库pytest-allure-adaptor jenkins上插件的安装 jenkins的安装:windows上的安装 手机/模拟器:华为荣耀畅玩5C,夜神模拟器

558a14ff93563dee13f39af489e422e0.png

配置改写,以上课所写的前程贷的自动化框架为主。

框架的分层如下:

6b926b756f069133dca0ddc9b00db602.png

在上述框架中,我们的配置信息存在Caps目录下的Caps.yaml中。

譬如这样:

b4d193ca95da1340542a3b81ab8485e1.png

这只是一台手机的设备信息和连接信息,

如果我们需要两台甚至多台,就需要把它们的信息都写入yaml文件,

每个手机的信息用一个列表描述。

c799ce3c6cbed6a99db2b211df9edc62.png

注意:

01上述yaml文件中多了deviceDesc和udid,前者是我们用来区分不同的手机,后者是appium用来区分不同的手机

02 给不同的手机设置不同的端口,荣耀畅玩5C使用的是4723,夜神模拟器使用的是4726

d4b2f346a59b7733cddb2b42230de458.png


BaseDriver是公共的driver类,通过读取yaml配置信息,生成并返回driver对象。

其基本的传递路径是:

Caps.yaml-->BaseDriver.py-->conftest:设置不同的fixture,返回driver,

因此它是沟通配置信息和conftest的桥梁,

既然配置信息变了,相应的BaseDriver的读取也要改变,

改写前的BaseDriver.py,具体代码如下:

73384d01c31614a289fc911789ee76f5.png

由于是多台手机,每个手机的通过配置信息里的deviceDesc来区分,

BaseDriver类中的base_driver函数需要设置一个变量device来区别不同的手机,

这个device是我们传入的,如果我们传入的是device="YeShen",还是用之前的代码的话,得到将是全部的信息。

有必要通过if判断筛选下,只取对应device的配置信息。

2427c6ba42201e2d335a792d8a2f1c11.png

conftest是比较关键的一部,

因为它会调用BaseDriver()类中的base_driver()方法,

以往我们的conftest是这样定义的:

8c7cd8eec59aa17592716e7ba84e82cd.png

但是现在不同了,这个basedriver()函数中必须传入一个device的实参,

这个实参是从哪里获得的?

pytest的fixture为我们提供了一种参数化的操作,

fixture可以带入参数params,依赖于这个fixture的一套测试会根据参数的不同运行多次,

而被装饰函数中通过特殊的request对象来访问每个参数:request.param访问的是列表中的每个元素

ec73997f980c58cc40c3210969605343.png

ea69d810ffc181aed36a045d58bf1864.png

allure可以设置不同的特性:

allure.feature(功能点) allure.story(子功能点) with allure.step(步骤) allure.attach(附件)等

结合pytest,一个收集测试用例,一个生成测试报告。

现在通过allure在测试用例中给测试报告增加一些特性。

d9afd4d59f021ce86421eb379b773592.png

启动多个appium-server

之前有想过python代码执行appium命令的形式去自动启动appium服务,

但通过npm或cnpm安装appium命令行都有报错,只能手动启动。

很简单,打开两个appium客户端,一个设置端口为4723,一个4726,启动即可。

d73f12342a958d82219a6c932b162937.png

d43cc97743e21a5b78be5a20e17acae8.png

这方面的内容不做过多介绍,只看下构建和构建后的操作,

其中allure-results是pytest运行测试用例生成的xml报告所在的目录,

jenkins上的Allure Commandline插件会自动解析xml,生成对应的html报告

74e8b3c9162b1e03afb92b91fbca19ef.png

afece90ca29a1519fcbc44853727c199.png

十分美观吧,右上角的TREND显示的是多次运行结果的趋势,

第7次到第19次都是5个fail,第20次6个fail

d4d67c5f75cb25cb54b9271d793920b1.png

除此之外,allure报告的Behaviors功能中可以看到每个测试用例对应的测试步骤、功能、子功能等,

测试报告还会标记出同一个测试用例是哪台手机执行的,

如下图:

TestLogin.test_login_errorPasswd[Honor_5C]

代表的执行机是荣耀畅玩5C。

7efddf0a6e376c301ec96a0f132a8164.png

jenkins面板也展示了多次运行结果的趋势。

adb9d0d059533790b9b5c3f908135d89.png

850c1e1e307a7a7dbeceb65d7c4c2b6f.png


pytest中fixture的参数化虽然能够实现多台手机同时连接,但是运行并不是同时的。

因为request.param读取参数列表是遍历读取的,

所以造成了一个测试用例,手机A先执行,手机B后执行(假设params=["手机A", "手机B"]),

要想真正做到多台手机同时运行,就要用到多线程。

本文转载自柠檬班社区,未经允许谢绝转载

http://www.lemfix.com/topics/83

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值