目录

一、框架执行的三种方式TestSuite

1、测试用例维度(了解)

方法1:添加单个用例并执行  suite.addTest(TestDemo("test_01"))

方法2:添加多个用例并执行

2、测试类维度(了解)

3、以测试模块为维度(掌握)

二、测试报告

1、使用BeautifulReport库,这个功能比较少,仅了解

2、使用unittestreport库,这个是重写了TestRunner这个类

三、测试报告邮件发送

1、实现:也是使用unittestreport库中的方法

四、数据驱动

1、什么叫数据驱动?

2、使用ddt库

3、使用unittestreport中的ddt

一、框架执行的三种方式TestSuite

前置条件:创建一个start的py文件专门用来写框架执行入口

1、测试用例维度(了解)

方法1:添加单个用例并执行  suite.addTest(TestDemo("test_01"))

注:导入的测试用例类代码详见上一篇中最后一段代码(3)py接口自动化之unittest框架详解(概念、前后置、执行顺序、断言)_Annlin_的博客

import unittest
# 导入测试用例类
from demo03 import TestDemo

# 创建测试套件
suite = unittest.TestSuite()
# 添加某个测试用例到测试套件
suite.addTest(TestDemo("test_01"))  # 未测试通过就是一个F
suite.addTest(TestDemo("test_02"))  # 测试通过就是一个.
# 创建执行器
runner = unittest.TextTestRunner()
runner.run(suite)

执行结果: F就是用例执行失败的标识、.就是用例执行成功的标识

pytest中csv封装 pytest接口_自动化

  方法2:添加多个用例并执行


tests = [TestDemo("test_01"),TestDemo("test_02")] suite.addTests(tests)


import unittest
# 导入测试用例类
from demo03用例的执行顺序和断言 import TestDemo

# 创建测试套件
suite = unittest.TestSuite()
# 添加多个测试用例,从导入的测试类中添加用例
tests = [TestDemo("test_01"), TestDemo("test_02")]
suite.addTests(tests)
# 创建执行器
runner = unittest.TextTestRunner()
runner.run(suite)

        执行结果同方法一的结果。

2、测试类维度(了解)

        使用makeSuite()方法: suite.addTest(unittest.makeSuite(TestDemo))

import unittest
# 导入测试用例类
from demo03用例的执行顺序和断言 import TestDemo

# 创建测试套件
suite = unittest.TestSuite()
# 添加TestDemo这个测试类到测试套件中,这个类中的所有用例都会被添加进来
suite.addTest(unittest.makeSuite(TestDemo))

# 创建执行器
runner = unittest.TextTestRunner()
runner.run(suite)

        执行结果同方法一的结果。

3、以测试模块为维度(掌握)

        A、先在同一目录下创建一个/多个测试模块,命名test开头

import unittest


class TestDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("类级别的前置(类方法)")

    @classmethod
    def tearDownClass(cls):
        print("类级别的后置(类方法)")

    # 函数级别的前置
    def setUp(self):
        print("函数级别的前置")

    # 函数级别的后置
    def tearDown(self):
        print("函数级别的后置")

    # test命名的默认为测试用例
    def test_01(self):
        print("测试用例01")

    def test_02(self):
        print("测试用例02")


if __name__ == '__main__':
    unittest.main()

        B、创建start执行器,添加测试模块到测试套件中                unittest.defaultTestLoader.discover(start_dir=case_path, pattern="test*.py")

import unittest
import os.path

# 获取当前目录
case_path = os.path.dirname(__file__)
print(case_path)
# 这个方法直接拿到的就是测试套件,不需要去创建
# start_dir:测试文件目录,要先获取目录
# pattern='test*.py':测试用例文件名称,默认是以test开头的py文件,支持多个和单个
suite = unittest.defaultTestLoader.discover(start_dir=case_path, pattern="test*.py")

# 创建执行器
runner = unittest.TextTestRunner()
runner.run(suite)

         会将名字为test开头的py文件全部执行

二、测试报告

1、使用BeautifulReport库,这个功能比较少,仅了解

        A、先安装pip install BeautifulReport

        B、使用        

import unittest
import os.path
# 从库中导入要使用的类
from BeautifulReport import BeautifulReport

case_path = os.path.dirname(__file__)
suite = unittest.defaultTestLoader.discover(start_dir=case_path)
# 使用BeautifulReport()执行用例
br = BeautifulReport(suite)
# 将执行结果格式化成测试报告,未指定目录时,默认在当前目录下
br.report(description="测试报告描述", filename="my_reports.html", theme='theme_default')

        C、测试报告截图

pytest中csv封装 pytest接口_测试报告_02

2、使用unittestreport库,这个是重写了TestRunner这个类

        A、先安装pip install unittestreport

        B、使用   

import unittest
import os.path
# 导入需要的类
from unittestreport import TestRunner

case_path = os.path.dirname(__file__)
suite = unittest.defaultTestLoader.discover(start_dir=case_path)
# 使用unittestreport()中的TestRunner()生成测试报告
runner = TestRunner(
    suite=suite,
    filename="report.html",  # 名称
    report_dir="./reports",  # 目录
    title='测试报告',  # 标题
    tester='测试员',  # 测试人员
    desc="XX项目测试生成的报告",  # 备注
    templates=2 # 生成的测试报告模板,有1、2、3三种,感兴趣的同学可以自己试一下
)
# 执行
runner.run()

        C、执行结果

pytest中csv封装 pytest接口_运维_03

  3、注意,上述的这两种生成测试报告的方法,不能一起使用。否则会报错 

三、测试报告邮件发送

1、实现:也是使用unittestreport库中的方法


runner.send_email( host="smtp.qq.com", # smtp服务器地址 port=465, # 端口 user="784368637@qq.com", # 发送邮箱 password="veasbugntxnzbcdf", # 邮箱服务码 to_addrs=["784368637@qq.com"] # 接收邮箱 )


import unittest
import os.path
# 导入需要的类
from unittestreport import TestRunner

case_path = os.path.dirname(__file__)
suite = unittest.defaultTestLoader.discover(start_dir=case_path)
# 使用unittestreport()中的TestRunner()生成测试报告
runner = TestRunner(
    suite=suite,
    filename="report.html",  # 名称
    report_dir="./reports",  # 目录
    title='测试报告',  # 标题
    tester='测试员',  # 测试人员
    desc="XX项目测试生成的报告",  # 备注
    templates=2
)
# 执行
runner.run()

# 使用邮件发送测试报告
# 发送邮箱要先开启邮件服务,开启方法请百度。开启后可以获得邮箱服务码
runner.send_email(
    host="smtp.qq.com",  # smtp服务器地址
    port=465,  # 端口
    user="78xxxxxx@qq.com",  # 发送邮箱
    password="veasbugntxnzbcdf",  # 邮箱服务码
    to_addrs=["7834xxxxxxx@qq.com"]  # 接收邮箱
)

四、数据驱动

1、什么叫数据驱动?

        A、业务流程是固定的,变化的是业务中的数据(就可以做数据驱动)

                如post、get(接口地址不一样,请求参数不一样,请求头不一样,请求方式不一样。)

        B、使用场景

                业务流程一样,请求数据不一样

2、使用ddt库

        A、安装ddt : pip install ddt

        B、使用

import unittest
    # 导入ddt 
    # 没用的类不要导,会加载到内存中
    from ddt import ddt, data
    # 假设这是我们从excel中获取的用例(为什么是这个格式,请翻阅excel篇)
    test_cases = [{"api": "/api/login", "user": "admin"}, {"api": "/api/login", "user": "test"}]
    
    
    # 装饰器
    @ddt
    class TestDemo(unittest.TestCase):
        # 解压列表test_cases(取出每一条用例)
        @data(*test_cases)
        # data是用来接收取出的每一条用例
        def test_01(self, case):
            # 输出用例
            print(case)

        C、结果:两条用例执行通过,输出的用例参数 

pytest中csv封装 pytest接口_测试报告_04

3、使用unittestreport中的ddt

import unittest
# 导入所需要的类
from unittestreport import ddt, list_data

test_cases = [{"api": "/api/login", "user": "admin"}, {"api": "/api/login", "user": "test"}]


@ddt
class TestDemo(unittest.TestCase):
    # 解压列表test_cases(取出每一条用例),因为源码已经封装好了所以不需要使用*
    @list_data(test_cases)
    # data是用来接收取出的每一条用例
    def test_01(self, case):
        # 输出用例
        print(case)