Published on

Python Unittest单元测试框架介绍

Authors
  • avatar
    Name
    Liant
    Twitter

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文件

img/img.png img/img_1.png

退出虚拟环境: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开始命名

正常情况下,类名的每个单词首字母会大写

img/img_2

测试用例

用例必须以test开始命名 img/img_3

断言

断言的方法 img/umg_4
自定义报错提示,断言方面里面传msg img/umg_5

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

0:静默模式 会显示用例总数及失败信息img/img_8
1:默认模式 会标注成功或失败img/img_7
2:详细模式 img/img_6

测试报告

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)