UnitTest框架
Python自带的一个作为单元测试的测试框架,相当于Java中的JUnit,随着自动化技术的成熟,由UnitTest再衍生出PyTest,PyTest可以完美结合UnitTest来实现自动化。
基本应用
1、环境搭建
Python中已经直接加载了UnitTest框架,无需额外安装
2、四大组件
# unittest四大组件:
# a. text fixture: setUp(前置条件) tearDown(后置条件) 用于初始化测试用例及清理和释放资源,只需定义一次
# b. test case: 测试用例,通过集成unittest.TestCase,来实现用例的继承
# 在unittest中,测试用例都是通过test来识别的(def test_xxxx())
# c. test suite: 测试套件,也成为测试用例集
# d. test runner: 运行器,一般通过runner来调用suite去执行测试
3、UnitTest运行机制
通过在main函数中,调用unittest.main()运行所有内容
UnitTest自动化测试实现
1、自动化测试减少冗余,便于维护
2、ddt数据驱动
-
ddt(data-driver tests),在实际测试中,单个测试是需要多种不同的条件(测试数据)对其进行测试的
-
ddt中最基本的应用:在class前定义@ddt,用于表示要使用ddt了,再基于实际的应用,选择对应的装饰器来使用即可,说白了,就是一个装饰器
- data用于设定参数
- unpack用于解析参数
ddt对于数据的解析方式,解析一个,传参一个
file_data是ddt中用于读取yml文件的装饰器
# coding:utf-8
import unittest
from selenium import webdriver
import time
from ddt import ddt,data,unpack,file_data
import yaml
def readFile():
# 定义一个list集合
params = []
# 通过open打开参数文档,以只读的形式,编码格式为utf-8,防止中文解析
file = open('params.txt','r',encoding='utf-8')
for line in file.readlines():
# list中添加元素(在这个过程删除回车并以','对字符进行分割)
params.append(line.strip('\n').split(','))
return params
@ddt
class forTestTest(unittest.TestCase):
# 加载驱动,打开相应浏览器
def setUp(self) -> None:
self.driver = webdriver.Chrome("C:/Users/Lulu/Desktop/job prepares/自动化测试/chromedriver.exe")
# self.driver.get('http://www.baidu.com')
# pass
# 进行测试用例的释放
def tearDown(self) -> None:
time.sleep(2)
self.driver.quit()
# pass
# 通过ddt中的data实现重复的数据驱动测试,使得程序的维护更加简便
# **表示字典,*表示元组,无*表示字符串
@data(*readFile())
@unpack
def test_1(self,url,txt):
self.driver.get(url)
self.driver.find_element_by_id('kw').send_keys(txt)
self.driver.find_element_by_id('su').click()
# file_data是ddt中用于读取yml文件的装饰器
@file_data('ppp.yml')
def test_2(self,txt):
print(txt)
print('********************')
if __name__ == '__main__':
unittest.main()
# params.txt文件
http://www.baidu.com,CSDN
http://www.baidu.com,博客园
# ppp.yml文件
name: 'name111'
info: 'info222'
测试用例test_1的输出结果为浏览器打开两次分别对CSDN、博客园进行搜索,且2秒后自动关闭
测试用例test_2测试用例输出结果如下