前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyUnit+uiautomator2实现应用自动化回归测试实践

PyUnit+uiautomator2实现应用自动化回归测试实践

作者头像
用户5521279
发布2019-06-02 16:06:36
1.4K0
发布2019-06-02 16:06:36
举报
文章被收录于专栏:搜狗测试

【一、前言】

上篇文章中,小编对Python-UiAutomator2使用、环境搭建、应用及操作进行了介绍,基于PyUnit+uiautomator2+HTMLTestRunner,本篇将介绍在项目中实现冒烟级别用例、定制需求等自动化测试执行的实践。

【二、PyUnit测试框架】

1、首先了解测试框架的基本原理和概念

python的单元测试框架PyUnit,可以认为是Java语言下的单元测试框架JUnit的Python语言实现版本,甚至其作者之一Kent Beck就是JUnit的作者。

unittest要达到如下目标:

(1). 支持自动化测试;

(2). 让所有的测试脚本共享开启(setup)和关闭(shut down)的代码;

(3). 可以通过集合(collections)的方式来组织测试用例脚本;

(4). 将所有的测试脚本从测试报告框架中独立出来;

unittest中最核心的部分是:TestFixture、TestCase、TestSuite、TestRunner。

(1). 测试装置(TestFixture)为一个或者多个测试用例做一些准备工作,例如:连接一个数据库,创建一个目录,或者开启一个进程;

(2). 测试用例(TestCase)测试用例是测试行为的最小单元,一个TestCase的实例就是一个测试用例,是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。

(3). 测试套件(TestSuite)将测试用例或者测试用例集合聚合组织起来的集合。可以批量执行一个测试套件内所有的测试用例;TestSuite也可以嵌套TestSuite。

(4). 测试执行器(TestRunner)组织安排测试脚本执行活动的组件。测试执行器通过一些图形界面,文本界面或者返回一些特殊的值来展示测试脚本的测试结果。主要用于生成测试报告;run(test)会执行TestSuite/TestCase中的run(result)方法,测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。

2、unittest模块的各个属性说明

(1)unittest的属性如下

'BaseTestSuite','FunctionTestCase','SkipTest','TestCase','TestLoader','TestResult', 'TestSuite','TextTestResult','TextTestRunner','defaultTestLoader','expectedFailure','loader', 'main', 'runner', 'skip', 'skipIf', 'skipUnless','suite', 等

unittest.TestCase:TestCase类,所有测试用例类继承的基本类。

unittest.main():使用她可以方便的将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。

unittest.TestSuite():unittest框架的TestSuite()类是用来创建测试套件的。

unittest.TextTextRunner():unittest框架的TextTextRunner()类,通过该类下面的run()方法来运行suite所组装的测试用例,入参为suite测试套件。

unittest.defaultTestLoader():defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。

unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

@unittest.skip(reason):skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。

@unittest.skipIf(reason):skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。

@unittest.skipUnless(reason):skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。

@unittest.expectedFailure():expectedFailure()测试标记为失败。

(2)TestCase类的属性如下:

setUp():用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。

tearDown():用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。

assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。

assertEqual、assertNotEqual、assertTrue、assertFalse、assertIs、assertNotIs、assertIsNone、assertIsNotNone、assertIn、assertNotIn、assertIsInstance、assertNotIsInstance

(3)TestSuite类的属性如下:(组织用例时需要用到)

'addTest', 'addTests','countTestCases', 'debug', 'run'等

addTest():方法是将测试用例添加到测试套件中。

(4)TextTextRunner的属性如下:(组织用例时需要用到)

'_makeResult', 'buffer', 'descriptions', 'failfast','resultclass', 'run', 'stream', 等

run():运行测试套件的测试用例,入参为suite测试套件。

【三、unittest基本示例】

1、apktool简介、配置

AutoTestReport.py

Test_case目录下case示例

sangde_custommade.py

结合上例,我们可以找到unittest中对应的具体实现对象:

(1). 测试装置(test fixture)由setUp函数来做初始化工作,由tearDown做销毁工作

(2). 测试用例(test case)对应TestCase类,或者更细化的对应里面的测试脚本函数

(3). 测试套件(test suite)对应TestSuite类

(4). 测试执行器(test runner)对应TextTestRunner类

【四、python-生成HTMLTestRunner测试报告】

HTMLTestRunner是Python标准库的unittest模块的一个扩展,它可以生成HTML的测试报告。

(1). 安装HTMLTestRunner

首先下载HTMLTestRunner.py文件,将下载的文件放入…\python\Lib目录下

python3版下载地址:http://pan.baidu.com/s/1dEZQ0pz

在IDLE里引入HTMLTestRunner包,如果没有报错,则说明添加成功,如下图:

(2). 导入模块:import HTMLTestRunner

(3). 生成TestReport

【五、应用实践】

本地testlist

选择要执行的testsuite

执行结果示例

TestReport示例(可查看出错的Testcase错误原因)

【六、参考】

https://blog.csdn.net/galen2016/article/details/73251240

https://blog.csdn.net/xiaosongbk/article/details/52933022

https://www.cnblogs.com/yufeihlf/p/5707929.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档