续接上一次笔记  ​​​​​​​ 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相关推荐

  1. python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

    1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

  2. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  3. python单元测试框架-Python unittest单元测试框架总结

    什么是单元测试 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对于函数abs(),我们可以编写的测试用例为: (1)输入正数,比如1.1.2.0.99,期待返回值与输入 ...

  4. python测试框架untest怎么循环执行_Python自动化测试-Unittest单元测试框架详解

    python中unittest模块是用来做单元测试的. unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep the ...

  5. unittest单元测试框架总结

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  6. unittest单元测试简单介绍

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  7. python单元测试框架unittest介绍和使用_Python+Selenium框架设计篇之-简单介绍unittest单元测试框架...

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unittest是一 ...

  8. unittest单元测试笔记

    单元测试 unittest单元测试是基于java的JUnit思想框架开发出来的测试框架 import unittest import HTMLTestRunner class Mytest1(unit ...

  9. python自动化测试框架有哪几种_Python自动化测试-Unittest单元测试框架详解

    python中unittest模块是用来做单元测试的. unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep the ...

  10. Python接口自动化之unittest单元测试

    ------·今天距2021年251天·------ 这是ITester软件测试小栈第115次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之requests请求封装,主要通 ...

最新文章

  1. 寄生电容所带来的影响
  2. 另一种绕过 Android P以上非公开API限制的办法
  3. 基本不等式解决乘积最大问题(洛谷P1887题题解,Java语言描述)
  4. php和c语言的字符数组中,字符数组和字符串的区别,C语言字符数组和字符串区别详解...
  5. 一蔚来ES8汽车疑似失控 将地下车库墙撞穿
  6. Java多线程学习二十一:ConcurrentHashMap 在 Java7 和 8 有何不同
  7. Java动态代理实现(转载\整理)
  8. Nginx在嵌入式系统中的应用
  9. weibo.cn html5,微博爬虫:爬取微博正文、关注人
  10. Java字节码插桩玩法(Javassist)
  11. 小僧去接众僧来赴道 水浒
  12. Flutter 淡入淡出与逐渐出现动画
  13. 4.直方图介绍和使用|MySQL索引学习
  14. 用esp8266驱动0.96寸OLED屏幕 太空人动画
  15. 四旋翼自主飞行器探测跟踪系统补充
  16. java eventbus 原理_EventBus原理解析
  17. win10下关闭笔记本自带键盘以及解锁
  18. JS实现 全选跟反选
  19. 用CodeViser ARM 仿真器广泛用于手机软硬件调试
  20. python 初始化数组_python3 数组(列表)初始化

热门文章

  1. 使用串口转USB连接树莓派
  2. 金色传说:SAP-ABAP-销售订单增强:记录销售订单修改信息和修改原因
  3. 2021年电工(初级)考试题库及电工(初级)最新解析
  4. 计算机无法识别ipad,电脑无法识别iphone、ipad怎么办
  5. WPF 视觉树和逻辑树区别,以及其子节点的遍历过程。
  6. 学习编程比学开车要简单
  7. np.percentile用法
  8. Mysql出现 “ERROR 1062” 的解决方法
  9. Qt-Arm交叉编译以及调用虚拟键盘(中英)
  10. git提交到主干后,本地将主干代码更新到分支上