pytest和allure生成测试报告

pytest简介

pytest命名规则
使用pytest之前需要安装一下pytest : pip install pytest

类名必须以Test开头,必须是大写开头,也可以_test()结尾,类中的方法也必须以test开头,执行时值匹配以app开头的类和方法

pytest和unittest区别

共同点:
他们都有共同的方法setup(), teardown(), setupclass(), teardownclass()
执行顺序 setupclass() -> setup() ->teardown() -> teardownclass()

区别:

import pytest
class TestClass:
	def test01(self):
		pass

pytest使用自带的python-html 生成测试报告

生成测试报告之前需要安装pytest-html: pip install pytest-html

import pytest

class TestClass():
    def setUp(self):
        print('setUp')
	
    def test01(self):
        print('test01')
	
	@pytest.mark.skip() # 跳过该用例(函数)
    def test02(self):
        print('test02')

    def tearDown(self):
        print('tearDown')

if __name__ == '__main__':
	# 运行指定模块下,运行所有test开头的类和测试用例
	# -x出现一条测试用例失败就退出测试
	# -s:显示print内容
    pytest.main(['--html=./huuu_test/report.html','ohh.py','-s'])
	

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补充
. 点号,表示用例通过
F 表示失败 Failure
E 表示用例中存在异常 Error

由于自带生成测试报告的东西不是界面过于简单和不太美观可以使用allure

allure是一款轻量级并且非常灵活的开源测试报告框架。 它支持绝大多数测试框架, 例如TestNG、Pytest、JUint等。它简单易用,易于集成。

使用之前得要allure的环境变量(选择allure-2.13.2\bin)python需下载allure_pytest

pip install allure_pytest
使用前要下载的文件
链接:https://pan.baidu.com/s/1ndOyEHi_TQPQld8YLZgsjw
提取码:88ff

出现这个情况就是配置成功
在这里插入图片描述

Allure常用的几个特性

@allure.feature # 用于描述被测试产品需求
@allure.story # 用于描述feature的用户场景,即测试需求
with allure.step(): # 用于描述测试步骤,将会输出到报告中
allure.attach # 用于向测试报告中输入一些附加的信息,通常是一些

demo

import os
import pytest
import allure

class TestClass005():
    @allure.feature("登录")  # 用于定义被测试的功能,被测产品的需求点
    @allure.story("汽车系统")  # 用于定义被测功能的用户场景,即子功能点
    def test_login(self):
        assert 1 == 1

    @allure.feature("汽车")  # 用于定义被测试的功能,被测产品的需求点
    @allure.story("买入汽车")  # 用于定义被测功能的用户场景,即子功能点
    def test_cat(self):
        with allure.step("查看红旗系列车信息"):
            allure.attach('H8', '红旗')
            allure.attach('带话筒', '红旗')
        with allure.step("查看大众系列车信息"):
            allure.attach("带字母", '大众')
            allure.attach("w9", '大众', )


if __name__ == '__main__':
    pytest.main(['--alluredir', 'report/result', 'huuu_test.py'])  # 生成json类型的测试报告
    split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'  # 将测试报告转为html格式
    os.system(split)  # system函数可以将字符串转化成命令在服务器上运行

读取文件(和unittest是一样的,拿到数据后就可以进行操作)

读取xml文件

class Readxml():
    def read_xml(self, filename, onename, twoname):
        root = minidom.parse(filename)
        firstnode = root.getElementsByTagName(onename)[0]
        secondnode = firstnode.getElementsByTagName(twoname)[0].firstChild.data
        return secondnode


r = Readxml()
a = r.read_xml('../data/add.xml', 'k1', 'k2')
b = r.read_xml('../data/add.xml', 'k1', 'k3')
c = r.read_xml('../data/add.xml', 'k1', 'k4')
print(1,2,3)

在这里插入图片描述

读取csv文件

csv文件数据

1,3,4
3,4,7
import pytest
import csv  # 导入csv模块


class ReadCsv():
    def read_csv(self, path):
        item = []  # 定义一个空列表
        c = csv.reader(open(path, "r"))  # 得到csv文件对象
        for csv_i in c:
            item.append(csv_i)  # 将获取的数据添加到列表中
        return item


path = '../data/add.csv'
r = ReadCsv()
lists = r.read_csv(path)


class TestClass():
    def setUp(self):
        print('setUp')

    def test01(self):
        su = 0
        for i in lists:
            su = int(i[0]) + int(i[1])
            num = int(i[2])
        assert num == su

    # @pytest.mark.skip()  # 跳过该用例(函数)
    def test02(self):
        num = int(lists[1][0]) + int(lists[1][1])
        su = lists[1][2]
        assert num == int(su)

    def tearDown(self):
        print('tearDown')


if __name__ == '__main__':
    # 运行指定模块下,运行所有test开头的类和测试用例
    pytest.main(['--html=./huuu_test/report.html', 'huuu_test.py', '-s'])

在这里插入图片描述

练习题

import pytest
import allure
import os
import csv  # 导入csv模块
from demo.demo import CateClass


class ReadCsv():
    def read_csv(self, path):
        item = []  # 定义一个空列表
        c = csv.reader(open(path, "r"))  # 得到csv文件对象
        for csv_i in c:
            item.append(csv_i)  # 将获取的数据添加到列表中
        return item


path = '../data/add.csv'
rc = ReadCsv()
su = rc.read_csv(path)
list01 = su[0]
list02 = su[1]
c = CateClass()


class TestClass():
    @allure.feature('加法')
    @allure.story('实际结果')
    def test_add(self):
        with allure.step('加法'):
            su = c.add(int(list01[0]), int(list01[1]))
        assert int(list01[2]) == su

    @allure.feature('减法')
    @allure.story('实际结果')
    def test_reduct(self):
        with allure.step('减法'):
            su = c.add(int(list02[0]), int(list02[1]))
        assert su == int(list02[2])


if __name__ == '__main__':
    pytest.main(['--alluredir', 'report/result', 'huuu_test.py'])  # 生成json类型的测试报告
    split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'  # 将测试报告转为html格式
    os.system(split)  # system函数可以将字符串转化成命令在服务器上运行

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值