小言_互联网的博客

python+pytest/unittest+yaml+ddt+allure/HTMLTestRunner生成测试报告

294人阅读  评论(0)

前言:请自行安装好yaml/allure/jre,并且配置好环境变量
HTMLTestRunner.py已修改,支持python3.9。请把它放在你的python\Lib目录下
HTMLTestRunner.py下载
1.项目文件结构目录

  1. allureReport:用来存放allure生成的测试报告
  2. HTMLTestRunnerReport:用来存放HTMLTestRunner生成的测试报告
  3. common(可不用):用来存放封装好的方法,比如连接数据库的方法、发送登陆协议的方法等等
  4. config(可不用):配置文件
  5. data(可不用):测试用的数据文件,可以是csv、yaml、txt、xlrd等格式
  6. testcase:存放各种测试用例

※文件可不用的原因是新手可以先尝试写简单的测试用例,包括数据之类的都可以直接写在case里,但是测试用例如果不用固件封装的话维护性较低,后期再慢慢改进吧。

2.测试用例的固定要求

  1. .py文件必须以test_开头或者_test结尾
  2. 测试类必须以Test开头并且不能带有__init__方法
  3. 测试函数(测试用例)必须以test_开头

举个例子:

class TestItem():                       #测试类可以是这样
class Test_Item():                      #也可以是这样
	def test_login(self, *args):        #测试用例长这样
		'''用例内容'''

3.pytest测试用例案例

class TestItem:
    '''↑↑↑↑↑↑↑↑↑这是个测试类'''
    @staticmethod
    def setup_class(self):     #前置,不明白自己去百度
        print('用例开始执行')

    @staticmethod
    def teardown_class(self):  #后置,同上
        print('用例执行结束')

    def test_1(self):          #测试用例1
        print('nice啊兄die')

    def test_2(self):          #测试用例2
        x = 1
        y = 9
        assert x == y

执行结果,用例1通过并且打印了内容;用例2未通过,因为1≠9。

4.Yaml的作用?yaml如何调用?

  • 作用:假设你要通过脚本进行账号登陆,那么你会写一个登陆脚本,然后在脚本内写入要登陆的账号、账号密码。但是这个脚本只能登陆一个账号,如果要登陆1000个账号岂不是要写1000个脚本?这里就可以让脚本访问yaml数据,通过传入不同的账号信息参数,进行不同账号的登陆。
  • 使用:首先要创建一个.yaml文件

    内容我随便写了两组数据。
    数据1:
s:
    username: sjx001
    password: 1234567

j:
    username: sjx002
    password: 1234567

x:
    username: sjx002
    password: 1234567

数据2:

QQ:
 -
    username: sjx001
    password: 1234567
 -
    username: sjx002
    password: 1234567

weixin:
 -
    username: sjx003
    password: 1234567
 -
    username: sjx004
    password: 1234567

weibo:
  -
    username: sjx005
    password: 1234567
  -
    username: sjx006
    password: 1234567

这个数据让python读取出来的样子是嵌套的字典,我们可以通过键去调用。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
{‘s’: {‘username’: ‘sjx001’, ‘password’: 1234567}, ‘j’: {‘username’: ‘sjx002’, ‘password’: 1234567}, ‘x’: {‘username’: ‘sjx002’, ‘password’: 1234567}}


演示一下


1.如果想使用所有的账号信息,数据1演示。
直接使用ddt.file_data,注意使用DDT的话测试类需要继承unittest。

三组数据分别被打印了

2.如果只想登陆某组数据,数据2演示。
使用yaml中的键来指定。

结果是只打印了weibo下面的账号信息,OK

5.HTMLTestRunner生成测试报告
源码及注释都给你打出来,自己去理解。

import time
import os
import unittest
from HTMLTestRunner import HTMLTestRunner

def getAllCases():
    '''获取test_dir目录下所有以test_开头的测试用例并放入容器Testsuite中'''
    test_dir = r'D:\Test\testcase'
    Testsuite = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
    return Testsuite

def Runmain():
    '''在指定的路径下生成html格式的测试报告'''
    TestReport_dir = 'D:\Test\HTMLTestRunnerReport'
    fp = open(os.path.join(TestReport_dir, time.strftime("%Y-%m-%d %H时%M分%S秒")+'测试报告.html'), 'wb')
    runner = HTMLTestRunner(stream=fp, title='sjx的自动化测试报告', description='这是个案例')
    runner.run(getAllCases())

if __name__ == '__main__':
    Runmain()

生成的测试报告长这样!!!

6.allure生成测试报告
在配置好java环境且安装好allure的前提下,请你完成你的测试用例,并且规范点放在自己的测试项目里!
然后在终端输入pytest --alluredir +生成报告的目录。
pytest会开始执行你的测试用例,并且通过allure生成测试报告。


然后输入allure serve +生成报告的目录 打开测试报告,完事

两种测试报告根据自己的口味进行选择。达到这一步以后,可以根据实际需求去结合jenkins更进一步完善自动化过程。如果想在linux系统下执行脚本的话配置也是一样的,前提是你能够配置好linux环境。
以上就简单得展示了一遍测试报告的生成。

持续更新ing!当个快乐的测试工程师。


转载:https://blog.csdn.net/sjx1111111/article/details/110872608
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场