目录
一、框架执行的三种方式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就是用例执行失败的标识、.就是用例执行成功的标识
方法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、测试报告截图
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、执行结果
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、结果:两条用例执行通过,输出的用例参数
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)