python pytest单元测试

​ python pytest+allure


1.准备工作

pip install pystest

如果使用pytest-html生成html报告的话,还需要下载

pip install pytest-html

2. pytest的命名规则

  • pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开头的类和方法,比unittest更加严谨。
  • pytest的模块命名必须以test_开头或者结尾,否则不能找到该模块的测试用例。

3. pytest与unittest的相同点

  • unittest :Setup>> setupclass , teardown >> teardownclass
  • Pytest: setup, setup_class和teardown, teardown_class函数(和unittest执行效果一样)
  • 运行于测试方法的始末,即:运行一次测试函数会运行一次setup和teardown
  • 运行于测试方法的始末,但是不管有多少测试函数都只执行一次setup_class和 teardown_class

4. pytest利用自带的pytest-html生成报告。

 pytest.main(["--html=./report.html","模块.py"])

5. allure 的使用

  1. Allure 是一款轻量级并且非常灵活的开源测试报告框架。它支持绝大多数测试框架。

  2. 使用步骤:

    1.首先配置allure的环境变量。 命令行窗口输入allure查看是否安装成功。

    2.其次要安装allure

    pip install allure-pytest
    

    allure-pytest是Pytest的一个插件,通过它我们可以生成Allure所需要的用于生成测试报告的数据

6.案例演示

题目描述:测试开发的两个方法,一个相加,一个相减,数据分别存储在.csv和.xml文件中,结合使用pytest和

allure展示测试报告,(在@allure .story分别实现相加减)

# 文件夹解释
datas:存放数据文件  
demos:存放开发写的文档文件
pytest01:存放测试代码,此案例只使用test_03.py
readdatas:读取数据的代码文件夹

代码如下:

# datas/data.xml
<?xml version="1.0" encoding="UTF-8" ?>
<note>
    <add>
        <add1>2</add1>
        <add2>5</add2>
        <add3>7</add3>
    </add>
    <reduce>
        <reduce1>8</reduce1>
        <reduce2>5</reduce2>
        <reduce3>3</reduce3>
    </reduce>
</note>
# datas/data.csv
2,5,7
#demos/classes.py
class BaseClass(object):
    def add(self, a, b):
        c = a + b
        return c

    def reduce(self, a, b):
        c = a - b
        return c
#readdatas/readdatacsv.py
import csv  # 导入csv模块


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


r = ReadCsv()
print(r.read_csv())

#readdatas/readdataxml.py
from xml.dom import minidom


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
# readxml = Readxml()
# a = readxml.read_xml("../datas/data.xml", "add", "add1")
# print(a)
# pytest01/test_03.py
import pytest, os, allure
from demos.classes import BaseClass
from readdatas.readdatacsv import ReadCsv
from readdatas.readdataxml import Readxml

base = BaseClass()  # 导入开发的模块
csv = ReadCsv()
datac = csv.read_csv()  # 拿到csv数据   利用csv拿到两数相加的数据
xml = Readxml()


class TestClass():
    @allure.story("两数相加")
    def test001(self):
        # 两数相加测试   利用csv拿数据
        for i in datac:
            c = base.add(int(i[0]), int(i[1]))
            assert c == int(i[2])

    @allure.story("两数相减")
    def test002(self):
        # 两数相减测试,利用xml拿数据
        zz = int(xml.read_xml("../datas/data.xml", "reduce", "reduce1"))  # 拿到xml数据, 利用xml拿到两数相减的数据
        xx = int(xml.read_xml("../datas/data.xml", "reduce", "reduce2"))
        yy = int(xml.read_xml("../datas/data.xml", "reduce", "reduce3"))
        rr = base.reduce(zz, xx)
        assert rr == yy


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

然后点击运行。找到report/html下的.html文件打开查看报告。

posted @ 2021-06-04 15:36  醉魔君  阅读(132)  评论(0编辑  收藏  举报