目录
基于python语言的自动化常用的框架有三种,unittest、pytest、RF。前两款更多的用于白盒单元测试,RF可以很好的做系统测试使用。
Pytest的安装与运行
安装
安装pytest:pip install pytest
安装pytest的报告插件:pip install pytest-html
运行
1、如果未指定命令行参数,则从testpath(如果已配置)或当前目录开始收集。如果命令行参数,指定了目录、文件名或node id的任何组合,则按参数来找寻找。
2、找寻过程会递归到目录中,除非它们匹配上norecursedirs。
3、在这些目录中,搜索由其测试包名称导入的 test_*.py 或 *_test.py 文件。再从这些文件中,收集如下测试项:test为前缀的 函数,Test为前缀的类里面的test为前缀的方法(注意大小写,class类的Test大写,def方法中test小写)
代码示例
class Test_rundemo:
def test_001(self):
print('行到水穷处,坐看云起时')
def test_002(self):
print('判断整数和字符是否相等')
assert 1 == '1',"整数不等于字符"
运行方式及命令
创建一个如上的代码,运行上面的代码,运行的方式
IDE中运行
在pycharm终端窗口运行,使用pytest命令运行,运行机制会自动匹配当前项目文件目录中符合pytest要求的所有文件,执行 pytest时,如果命令行没有指定目标目录或者文件, 它会自动搜索当前目录下所有符合条件的文件、类、函数。运行结果如下:
这种运行结果很简单,如果测试通过,会在运行的结果处用绿色的点表示,如果不通过则会表示错误用红色的F表示,并在下方显示运行失败的用例的内容,如下图:
但是有的时候我们需要对通过的测试用例也要查看详细内容,如上面的代码中的打印内容以及想得到更详细的执行信息,包括每个测试类、测试函数的名字,这时在使用pytest命令的时候就需要添加参数:
参数 -s 可以看到运行后的结果中多了打印的内容
参数 -v 显示运行的测试用例的类名和函数名
参数 ** 这里的星号表示我们需要运行的具体的文件目录的名字,因为好多时候我们不需要运行所有的用例,只是相关套件中的用例
如现在运行cases目录中的所有用例文件,命令为pytest -sv cases
命令行终端运行
在pc命令行窗口运行,需要先切换到项目下,使用python运行先运行pytest,
python -m pytest -sv cases,运行结果如下:
生成报告
前面安装pytest的时候,同时安装了pytest-html,要在运行时候同时生产html报告只需要在pytest命令中增加参数:pytest -v cases --html=report.html --self-contained-html
--html=后面指明的是生成报告的文件名,如果指明具体的路径,生成的报告就在当前运行的代码文件目录下,如果要指明保存的位置,参数要详细到存储报告文件的路径及报告文件名,如下生成到桌面:pytest -v cases --html=C:\Users\JS-143\Desktop\pytest测试报告\report.html --self-contained-html(注意不要添加参数-s,否则测试报告中对于通过用例会不显示日志内容)
报告中的乱码处理
如果测试套件或者用例命名中有中文会出现乱码问题,将上面代码中的class类和def方法的名称中添加汉字,运行后的报告中有乱码,如下:
解决方法:找到site-packages\pytest_html\plugin.py文件,修改其中的TestResult类,修改为下面的内容:
class TestResult:
def __init__(self, outcome, report, logfile, config):
# 源代码中的这行进行注释,防止以后要恢复
# self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape")
# 将上面一行代码改为下面这行
self.test_id = report.nodeid
检查点(断言)
pytest中用例的检查点直接用Python的assert断言。
assert后面的表达式结果为True,就是检查点通过,结果为False,就是检查点不通过。