Unittest-单元测试3
续接上一次笔记 Unittest-单元测试2
十一、忽略测试用例
@unittest.skip(“理由”) 直接忽略,给出理由
@unittest.skipIf(判断,”理由”) 符合判断忽略,给出理由
@unittest.skipUnless(判断,”理由”) 不符合判断忽略,给出理由
# 测试用例
@unittest.skip("测试忽略011")
def test01_cs01(self):print("测试011")
a = 10
@unittest.skipIf(a>2 and a<20,"在2到20之间忽略测试022")
def test01_cs02(self):print("测试022")@unittest.skipUnless(a < 2 , "a小于2忽略测试033")
def test01_cs03(self):print("测试033")
十二、unittest单元框架中的断言
assertEqual(a,b) 断言a==b
assertNotEqual(a,b) 断言a!=b
assertTrue(a) 断言a为真
assertFalse(a) 断言a为假
assertIn(a,b) 断言a在b里面
assertNotIn(a,b) 断言a不在b里面
十三、批量执行用例生成HTML格式的报告
HTMLTestRunner.py 放入python文件夹下的lib文件夹下
import os
import sys
import time
import unittest
from HTMLTestRunner import HTMLTestRunnerif __name__ == '__main__':# 第一种# unittest.main()# 通过测试套件suite = unittest.TestSuite()
# 执行所有当前目录下的用例testcases = unittest.defaultTestLoader.discover(os.getcwd(), '*.py')suite.addTests(testcases)# unittest.TextTestRunner(verbosity=2).run(suite)nowtime = time.strftime("%Y-%m-%d %H-%M-%S",time.localtime())name = open(os.getcwd()+"/"+nowtime+"report.html","wb")runner = HTMLTestRunner(stream=name,verbosity=2,title="unittest自动化测试报告",description="报告详情如下:")runner.run(suite)
保存当前报告到当前目录下生成report.html文件
name = open(os.getcwd()+"/"+nowtime+"report.html","wb")
设置生成报告的标题,保存路径,展示情况等
runner = HTMLTestRunner(stream=name,verbosity=2,
title="unittest自动化测试报告",description="报告详情如下:")
运行生成报告
runner.run(suite)
十四、DDT数据驱动
unittest,ddt
1.为什么需要数据驱动?
数据文件中有11组数据,代码只有一份。代码数据分离,解耦合。
2.驱动模式介绍
数据驱动
关键字驱动(核心:把业务逻辑封装成关键字login,只需要调用login。)
混合驱动模式(关键字驱动+数据驱动):市场主流
行为驱动测试:Lettuce
3.什么是DDT
data driver test 数据驱动测试。特点:可以完美和应用于Unittest框架实现数据驱动。
4.DDT详解
ddt是通过装饰器的形式来调用的。
装饰器:完成一种特定功能的函数(事物)。
在python里面装饰器是以@开头,并且装饰器有两种:类装饰器,函数装饰器。
ddt里面有哪些装饰器:
@ddt(类装饰器,申明当前类使用ddt框架)
@data(函数装饰器,用于给测试用例传递数据)
@unpack(将传输的数据包解包),一般作用与元祖tuple和列表list
@file_data(函数装饰器,可直接读取yaml/json文件)
5.实战@ddt,@data
总结:当传单个值时,所有的类型都可以传,并且用例执行一次。
如果说:@data传入多个值的时候,那么传几个值,那么用例执行几次
6.实战@unpack
如果是数字或者字符串:那么不需要@unpack
如果是元祖和列表的话,那么可以通过@unpack,但是参数的个数必须和解完包后的值的个数一样
如果是集合无法解包
如果是字典,那么可以通过@unpack解包,但是参数的名字和个数必须和字典的键保持一直。
@ddt
class Test(unittest.TestCase):# python数据类型:数字(int,long,float,complex),字符串,列表list,元祖tuple,集合set,字典dict@data(("王者","荣耀"),("10","20"))@unpackdef test01_ceshi(self,args1,args2):print(args1,args2)@data(["王者","荣耀"],["10","20"])@unpackdef test02_ceshi(self,args1,args2):print(args1,args2)@data({"name":"王者","age":"18"},{"name":"荣耀","age":"18"})@unpackdef test03_ceshi(self,name,age):print(name,age)if __name__ == '__main__':unittest.main()
7.DDT项目实战
Python的环境
两种环境:
1.本地(只有一个)
2.虚拟(有N个,每一个项目都有一个虚拟环境)
import os
import time
import unittest
from HTMLTestRunner import HTMLTestRunnerimport openpyxl
from ddt import ddt, data, unpack
from selenium import webdriver# 读取excel
# xlrd,xlwt,openpyxl
def read_excel():workbook = openpyxl.load_workbook("data1.xlsx")sheet = workbook["login"]# print(sheet.max_row, sheet.max_column)alllist = []for row in range(2, sheet.max_row + 1):templist = []for col in range(1, sheet.max_column + 1):templist.append(sheet.cell(row, col).value)alllist.append(templist)number = len(alllist)return alllist@ddt
class Test(unittest.TestCase):@data(*read_excel())@unpackdef test_jenkins_login(self, order, username, password):driver = webdriver.Chrome()driver.get("http://192.168.2.25/#/login?redirect=%2Findex")driver.find_element_by_xpath('//*[@id="app"]/div/form/div[1]/div/div/input').clear()driver.find_element_by_xpath('//*[@id="app"]/div/form/div[1]/div/div/input').send_keys(username)driver.find_element_by_xpath('//*[@id="app"]/div/form/div[2]/div/div[1]/input').clear()driver.find_element_by_xpath('//*[@id="app"]/div/form/div[2]/div/div[1]/input').send_keys(password)driver.find_element_by_xpath('//*[@id="app"]/div/form/div[3]/div/button').click()time.sleep(3)# 断言self.assertIn("#/index", driver.current_url, msg="用户不存在/密码错误")if __name__ == '__main__':testcases = unittest.defaultTestLoader.discover(os.getcwd(), '*.py')nowtime = time.strftime("%Y-%m-%d %H-%M-%S", time.localtime())filename = open(os.getcwd() + "/" + nowtime + "report.html", "wb")runner = HTMLTestRunner(stream=filename, verbosity=2,title="登录自动化测试报告", description="报告详情")runner.run(testcases)
Unittest-单元测试3相关推荐
- python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...
1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...
- Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型
1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- python单元测试框架-Python unittest单元测试框架总结
什么是单元测试 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对于函数abs(),我们可以编写的测试用例为: (1)输入正数,比如1.1.2.0.99,期待返回值与输入 ...
- python测试框架untest怎么循环执行_Python自动化测试-Unittest单元测试框架详解
python中unittest模块是用来做单元测试的. unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep the ...
- unittest单元测试框架总结
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- unittest单元测试简单介绍
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- python单元测试框架unittest介绍和使用_Python+Selenium框架设计篇之-简单介绍unittest单元测试框架...
前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unittest是一 ...
- unittest单元测试笔记
单元测试 unittest单元测试是基于java的JUnit思想框架开发出来的测试框架 import unittest import HTMLTestRunner class Mytest1(unit ...
- python自动化测试框架有哪几种_Python自动化测试-Unittest单元测试框架详解
python中unittest模块是用来做单元测试的. unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep the ...
- Python接口自动化之unittest单元测试
------·今天距2021年251天·------ 这是ITester软件测试小栈第115次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之requests请求封装,主要通 ...
最新文章
- 寄生电容所带来的影响
- 另一种绕过 Android P以上非公开API限制的办法
- 基本不等式解决乘积最大问题(洛谷P1887题题解,Java语言描述)
- php和c语言的字符数组中,字符数组和字符串的区别,C语言字符数组和字符串区别详解...
- 一蔚来ES8汽车疑似失控 将地下车库墙撞穿
- Java多线程学习二十一:ConcurrentHashMap 在 Java7 和 8 有何不同
- Java动态代理实现(转载\整理)
- Nginx在嵌入式系统中的应用
- weibo.cn html5,微博爬虫:爬取微博正文、关注人
- Java字节码插桩玩法(Javassist)
- 小僧去接众僧来赴道 水浒
- Flutter 淡入淡出与逐渐出现动画
- 4.直方图介绍和使用|MySQL索引学习
- 用esp8266驱动0.96寸OLED屏幕 太空人动画
- 四旋翼自主飞行器探测跟踪系统补充
- java eventbus 原理_EventBus原理解析
- win10下关闭笔记本自带键盘以及解锁
- JS实现 全选跟反选
- 用CodeViser ARM 仿真器广泛用于手机软硬件调试
- python 初始化数组_python3 数组(列表)初始化