- Published on
Python Unittest单元测试框架介绍
- Authors
- Name
- Liant
pip介绍
1、pip是python标准库的管理器
2、允许安装不属于python标准库的其它软件包
3、python3.4及2.7.9版本开始,pip被直接包括在python的安装包内
4、pypi托管了大量非常流行的库;www.pypi.org
pip 常用命令
- 查看pip版本:pip -V
- 帮助:pip help / -h
- 安装:pip install selenium==2.39.0
- 升级版本:pip install -U 包名
- 卸载:pip uninstall 包名
- 列出所有安装的包文件:pip list
- 下载包:pip download 包名
- 搜索包:pip search 包名
- 临时换源安装:pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple
- 永久换源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- 导出项目使用的的依赖包:pip freeze >requirement.txt
- 下载项目使用的的依赖包:pip install -r requirement.txt
拓展-python3标准库:https://docs.python.org/zh-cn/3/library/
虚拟环境
创建虚拟环境命令:python -m venv demo
激活虚拟环境:执行Scripts文件下的activate.bat文件


退出虚拟环境:deactivate
问题
1、win10 powerShell 无法激活虚拟环境及退出环境
解决:
1、用管理员运行 powerShell
2、执行命令:Set-ExecutionPolicy RemoteSigned
3、在Scripts路径下执行: .\activate
4、退出虚拟环境:deactivate
Unittest
主流的单元测试框架,如Java的Junit、TestNg,python的Unittest、Pyunit、Pytest
unittest官网地址:https://docs.python.org/3/library/unittest.html
单元测试框架作用
提供用例组织与执行
提供丰富的断言方法
提供丰富的日志与测试结果
Unittest 核心要素
TestCase:即测试用例,Unittest提供testCase类来编写测试用例,一个TestCase的实例就是一个测试用例。一条测试用例就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown),通过运行一条测试用例,可以对某一个问题进行验证
Fixture:即测试固件,用于测试用例环境的搭建和销毁。在测试步骤执行前需要为该测试用例准备环境(SetUp),如启动app或打开浏览器,测试步骤执行后需要恢复环境 (TearDown),如关闭app或浏览器,这时候就需要用到Fixture,使代码更简洁
TestSuite:即测试套件,把需要执行的测试用例集合在一起就是TestSuite。使用TestLoader来加载TestCase到TestSuite中
TextTestRunner:即测试执行器,用于执行测试用例。该模块中提供run方法执行TestSuite中的测试用例,并返回测试用例的执行结果,如运行的用例总数、用例通过数、用例失败数
report:即测试报告。unittest框架没有自带的用于生成测试报告的模块或接口,需要使用第三方的扩展模块HTMLTestRunner,BeautifulReport,allure
TestCase
继承了unittest.TestCase类就是测试类
测试类必须继承unittest.TestCase类
测试类可以不用以test开始命名
正常情况下,类名的每个单词首字母会大写

测试用例

断言


Fixture 测试固件
setUp,tearDown
每条测试用例都会执行
比如登录,清除数据
setUpClass,tearDownClass
每个测试类开始/结束时执行
比如打开浏览器,关闭浏览器
TestSuite 测试套件
一、unittest.main
unittest.main() 会找当前文件中的所有测试方法
测试用例执行顺序是按test字符后面的字母顺序执行
二、加入容器中执行,suite
suite = unittest.TestSuite()
suite.addTest(Demo("test04"))
suite.addTest(TestStringMethods("test_abc"))
unittest.TextTestRunner().run(suite)
按添加顺序执行
三、加载测试类 unittest.TestLoader
suite1 = unittest.TestLoader().loadTestsFromTestCase(Demo)
suite = unittest.TestSuite([suite1])
unittest.TextTestRunner(verbosity=1).run(suite)
四、加载文件 discover
test_dir = "./test_cases"
discover = unittest.defaultTestLoader.discover(test_dir, pattern="test_*.py")
unittest.TextTestRunner().run(discover)
TextTestRunner
unittest.TextTestRunner(verbosity=2).run(discover)
unittest.TextTestRunner(verbosity=1).run(suite)
verbosity 表示测试结果信息的复杂度,默认为1



测试报告
path1 = os.path.split(sys.path[0])[0]
times = time.strftime("%Y%m%d%H%M%S")
report_file = path1 + "/report/" + times + "-testweb.html"
fp = open(report_file, "wb")
runner = HTMLTestRunner(stream=fp,
title="自动化测试报告",
description="运行环境:linux Chrome;运行结果受服务器网络影响,仅供参考",
retry=1,
save_last_try=True)
runner.run(discover)