软件测试肖sir__python之ui自动化测试框架unittest

news2024/11/16 11:36:28

ui自动化测试框架unittest
一、自动化框架
1、自动化框架类型
(1)unittest框架 (python中自带框架)
(2)pytest框架 (第三方库)
(3)po框架 (分层思维)
2、自动化框架作用:管理和组织用例

二、介绍下:unittest框架
代码:

import  unittest  #导入自动化测试框架
class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase   cms类名
     @classmethod  #类方法
     def  setUpClass(cls) -> None: #类的开始
         print('类的开始')
     @classmethod
     def  tearDownClass(cls) -> None:  #类的结束
         print('类的结束')
     def setUp(self) -> None: #方法的开始
         print('方法开始')     #运行前准备工作,
     def  tearDown(self) -> None:
         print('方法结束')   #运行后的工作关闭窗口,时间等待
     def  test1(self):  #用例1
         print('1111')
     def  test2(self): ##用例2
         print('3333')
     def   testA(self): ##用例3
         print('AAAA')
     def   testa(self):
         print('aaaa')
     def   bbb(self):
         print('bbb')
if __name__ == '__main__':  #main函数
    unittest.main()  #调用所有的用例

类的开始
方法开始
1111
方法结束
方法开始
3333
方法结束
方法开始
AAAA
方法结束
方法开始
aaaa
方法结束
类的结束

总结:
1、类的开始,类的结束只执行一次
2、方法开始,方法结束 每一次都执行了
3、运行时顺序按照ascii码排序:0-9,A-Z,a-z
4、用例必须用test开头,如果没有test开头就不运行

二、实际项目用例编写

from selenium import webdriver
import time

import  unittest  #导入自动化测试框架
class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase   cms类名
     @classmethod  #类方法
     def  setUpClass(cls) -> None: #类的开始
         print('类的开始')
     @classmethod
     def  tearDownClass(cls) -> None:  #类的结束
         print('类的结束')
     def setUp(self) -> None: #方法的开始
         self.dx = webdriver.Chrome()  # 创建一个 webdriver对象
         self.dx.get("https://www.baidu.com/")  # 通过对象打开网址
         time.sleep(3)   #运行前准备工作,
     def  tearDown(self) -> None:
         time.sleep(3)
         self.dx.close()
         # print('方法结束')   #运行后的工作关闭窗口,时间等待
     def  test1(self):  #用例1
         self.dx.find_element_by_id("kw").send_keys('python')
     def  test2(self): ##用例2
         self.dx.find_element_by_id("kw").send_keys('html')
     def   testA(self): ##用例3
         self.dx.find_element_by_id("kw").send_keys('mysql')
     def   testa(self):
          self.dx.find_element_by_id("kw").send_keys('linux')
     def   bbb(self):
         self.dx.find_element_by_id("kw").send_keys('我不是test')
if __name__ == '__main__':  #main函数
    unittest.main()  #调用所有的用例

三、unittest 调用方法
(1)第一种调用所有用例unittest.main()

from selenium import webdriver
import time

import  unittest  #导入自动化测试框架
class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase   cms类名
     @classmethod  #类方法
     def  setUpClass(cls) -> None: #类的开始
         print('类的开始')
     @classmethod
     def  tearDownClass(cls) -> None:  #类的结束
         print('类的结束')
     def setUp(self) -> None: #方法的开始
         self.dx = webdriver.Chrome()  # 创建一个 webdriver对象
         self.dx.get("https://www.baidu.com/")  # 通过对象打开网址
         time.sleep(3)   #运行前准备工作,
     def  tearDown(self) -> None:
         time.sleep(3)
         self.dx.close()
         # print('方法结束')   #运行后的工作关闭窗口,时间等待
     def  test1(self):  #用例1
         self.dx.find_element_by_id("kw").send_keys('python')
     def  test2(self): ##用例2
         self.dx.find_element_by_id("kw").send_keys('html')
     def   testA(self): ##用例3
         self.dx.find_element_by_id("kw").send_keys('mysql')
     def   testa(self):
          self.dx.find_element_by_id("kw").send_keys('linux')
     def   bbb(self):
         self.dx.find_element_by_id("kw").send_keys('我不是test')
if __name__ == '__main__':  #main函数
    unittest.main()  #调用所有的用例

(2)第二种:调用部分用例
TestSuite:(套件)
对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
TextTestRunner:
是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在

运行中出现全部修改路径:
在这里插入图片描述
案例:

import  unittest  #导入自动化测试框架
class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase
     @classmethod
     def  setUpClass(cls) -> None: #类的开始
         print('类的开始')
     @classmethod
     def  tearDownClass(cls) -> None:  #类的结束
         print('类的结束')
     def setUp(self) -> None: #方法的开始
         print('方法开始')
     def  tearDown(self) -> None:
         print('方法结束')
     def  test1(self):
         print('1111')
     def  test3(self):
         print('3333')
     def test2(self):
         print('2222')
     def   testA(self):
         print('aaaa')
     def   testa(self):
         print('AAAA')
     def   bbb(self):
         print('bbb')
if __name__ == '__main__':
    # unittest.main()  #调用所有的用例
   tj=unittest.TestSuite() #创建套件对象
   # tj.addTest(Cms('test2'))
   tj.addTests([Cms("test2"),Cms("test3")])
   r=unittest.TextTestRunner()
   r.run(tj)

(3)第三种:调用一个路径下的用例
TestLoader:
是用来搜索所有以test开头的测试用例,

import  unittest  #导入自动化测试框架
class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase
     @classmethod
     def  setUpClass(cls) -> None: #类的开始
         print('类的开始')
     @classmethod
     def  tearDownClass(cls) -> None:  #类的结束
         print('类的结束')
     def setUp(self) -> None: #方法的开始
         print('方法开始')
     def  tearDown(self) -> None:
         print('方法结束')
     def  test1(self):
         print('1111')
     def  test3(self):
         print('3333')
     def test2(self):
         print('2222')
     def   testA(self):
         print('aaaa')
     def   testa(self):
         print('AAAA')
     def   bbb(self):
         print('bbb')
if __name__ == '__main__':
    # unittest.main()  #调用所有的用例  #第一种
   # tj=unittest.TestSuite() #创建套件对象 #第二种
   # # tj.addTest(Cms('test2'))
   # tj.addTests([Cms("test2"),Cms("test3")])
   # r=unittest.TextTestRunner()
   # r.run(tj)
   lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径
   d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
   r=unittest.TextTestRunner()
   r.run(d)

(4)第四种:使用html报告模板生成自动化测试报告

a、下载一个报告模板:
在这里插入图片描述
在这里插入图片描述
b、跑出来报告
在这里插入图片描述

import  unittest  #导入自动化测试框架
import time
from  dcs.dsc2.HTMLTestRunner3_New import HTMLTestRunner
class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase
     @classmethod
     def  setUpClass(cls) -> None: #类的开始
         print('类的开始')
     @classmethod
     def  tearDownClass(cls) -> None:  #类的结束
         print('类的结束')
     def setUp(self) -> None: #方法的开始
         print('方法开始')
     def  tearDown(self) -> None:
         print('方法结束')
     def  test1(self):
         print('1111')
     def  test3(self):
         print('3333')
     def test2(self):
         print('2222')
     def   testA(self):
         print('aaaa')
     def   testa(self):
         print('AAAA')
     def   bbb(self):
         print('bbb')
if __name__ == '__main__':
    # unittest.main()  #调用所有的用例  #第一种
   # tj=unittest.TestSuite() #创建套件对象 #第二种
   # # tj.addTest(Cms('test2'))
   # tj.addTests([Cms("test2"),Cms("test3")])
   # r=unittest.TextTestRunner()
   # r.run(tj)
  # lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径 #第三种
# d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
# r=unittest.TextTestRunner()
# r.run(d)

  lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径 #第三种
  d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
  bglj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2"
  new=time.strftime("%y-%m-%d-%H-%M-%S")
  file=bglj+"/"+str(new)+"_ui.html"
  f=open(file,'wb')
  r=HTMLTestRunner(
      stream=f,title="ui自动化测试报告",description="用例执行情况" ,tester="dcs35"
  )
  r.run(d)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1119146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10.一篇文章带你理解及使用CSS(前端邪术-化妆术)

文章目录 1. CSS 是什么2.基本语法规范3.引入方式3.1内部样式表3.2行内样式表3.3外部样式 4.代码风格4.1样式格式4.2样式大小写4.3空格规范 5.选择器5.1选择器的功能5.2选择器的种类5.3基础选择器5.3.1标签选择器5.3.2类选择器5.3.3 id 选择器5.3.4通配符选择器5.3.5基础选择器…

pytest自动化测试数据驱动yaml/excel/csv/json

这篇文章主要为大家介绍了pytest自动化测试数据驱动yaml/excel/csv/json的示例详解,有需要的朋友可以借鉴参考下。− 数据驱动 数据的改变从而驱动自动化测试用例的执行,最终引起测试结果的改变。简单说就是参数化的应用。 测试驱动在自动化测试中的应…

初始C++入门(2)

缺省参数 缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时&#xff0c;如果没有指定实 参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 有句俗话叫&#xff0c;做人不能像缺省函数。 #include<iostream> using namespace std;void…

C# winform如何实现数据的保存和读取

在c#winform中我们在写程序时&#xff0c;经常需要进行数据处理&#xff0c;那么数据如何保存和读取&#xff08;下面我们通过序列化和反序列化的方式来实现&#xff09; 第一步: 我们建立一个winform窗体 第二步: 构建一个外部实体类&#xff08;Student类&#xff09; 第…

再谈String

文章目录 一、字符串常量池1.1 创建对象的思考1.2 字符串常量池(StringTable)1.3 再谈String 对象创建 一、字符串常量池 1.1 创建对象的思考 下面创建String对象的方式相同吗&#xff1f; public static void main(String[] args) {String s1 "hello";String s2…

Java日志系统之Slf4j

目录 Slf4j Slf4j的简单使用 Slf4j的日志绑定流程 Slf4j桥接器 Slf4j Slf4j又称简单日志门面&#xff0c;Slf4j主要是为了给Java日志访问提供一套标准&#xff0c;规范的API框架&#xff0c;其主要意义在于提供接口&#xff0c;具体的实现可以交由其他的日志框架。 Slf4j…

概念解析 | 心脏电活动和机械活动之间的关系

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:心脏电活动和机械活动之间的关系。 心跳的交响乐:心脏电活动与机械活动之间的关联 一、背景介绍 心脏通过不断跳动将血液输送到我们身体的每一个角落。而这个跳动过程,是…

【Godot】【BUG】4.x NavigationAgent 导航不生效

4.2.beta2 试了半天才发现原来默认只对第一个有导航的 TileMap 的第 1 层 生效&#xff0c;而我设置的导航层不是第一层&#xff0c;然后我新建了一个 TileMap 将导航的瓦片设置到这个 TileMap 上了&#xff0c;如图 这样就解决了问题&#xff0c;不用再修改默认设置的东西了&a…

超详细 | 差分进化算法原理及其实现(Matlab/Python)

差分进化(Differential Evolution&#xff0c;DE)算法是由美国学者Storn和 Price在1995年为求解Chebyshev多项式拟合问题而提出的。算法主要通过基于差分形式的变异操作和基于概率选择的交叉操作进行优化搜索&#xff0c;虽然其操作名称和遗传算法相同&#xff0c;但实现方法有…

英语——词根篇——单词——f

文章目录 31 . factfactdo,make做&#xff0c;作&#xff08;fact也作fac&#xff09; 32.ferferbring&#xff0c;carry带&#xff0c;拿 33 . florflorflower花&#xff08;flow也作flour&#xff09; 34 . flufluflow流 35 . fusfaus pour灌&#xff0c;流&#xff0c;倾泻 …

IOS屏幕旋转监听

1.设计窗口,添加三个按钮 2.添加事件连接 3.按钮点击事件实现 先添加三个IBAction 实现IBAction 使用旋转立刻生效 -(IBAction)btnFixPortrait:(id)sender{//访问应用程序委托成员_app.mask UIInterfaceOrientationMaskPortrait;//设置窗口旋转属性[self setNeedsUpdateOf…

有效管理token,充分发挥ChatGPT的能力

目录 给提供了 Token 的计算工具,来理解一下Token的计算方式,网址如下: 窗口如下: 实际消耗 Token 数量为 59个,换算之后为2.1-2.2的比例,即一个汉字消耗2.12.2个Token, 再测一下英文的Token消耗,包含空格在内,一共52个英文字母,消耗Token 13个,正好对应13个单词,…

Linux中shell外壳,用户权限,文件权限

Linux 权限 1.shell外壳1.1 shell外壳的定义1.2 shell外壳的作用1.3 shell的原理 2.Linux用户权限2.1创建普通用户2.2 用户之间的切换2.3 sudo指令 3.Linux文件权限3.1文件访问者的分类&#xff08;人&#xff09;3.2 文件文件类型和访问权限&#xff08;事物属性&#xff09;3…

1.3 矩阵

一、向量与矩阵 下面是三个向量 u \boldsymbol u u、 v \boldsymbol v v、 w \boldsymbol w w&#xff1a; u [ 1 − 1 0 ] v [ 0 1 − 1 ] w [ 0 0 1 ] \boldsymbol u\begin{bmatrix}\,\,\,\,1\\-1\\\,\,\,\,0\end{bmatrix}\kern 10pt\boldsymbol v\begin{bmatrix}\,\,\,…

洛谷p1618三连击

import java.util.Scanner; //将 1-9 共9个数分成3组&#xff0c;分别组成3个三位数&#xff0c;且使这3个三位数构成A:B:C的比例&#xff0c;试求出所有满足条件的3个三位数。不满足输出“No!!!”。 public class Main {public static void main(String[] args) {Scanner sc …

Linux_Shell运行原理(命令行解释器)

一般我们叫Linux操作系统&#xff0c;狭义上就是指Linux内核&#xff08;kernel&#xff09;&#xff0c;广义上就是Linux内核Linux外壳程序对应的配套程序&#xff0c;这里我们来详细介绍一下这个“外壳程序”。 在我们使用指令时&#xff0c;这个外壳程序会将我们的解释指令并…

从零开始学习 Java:简单易懂的入门指南之网络编程(三十七)

网络编程 1. 网络编程入门1.1 网络编程概述1.2 网络编程三要素1.3 IP地址1.4 InetAddress1.5 端口和协议 2.UDP通信程序2.1 UDP发送数据2.2UDP接收数据2.3UDP通信程序练习2.4UDP三种通讯方式2.5UDP组播实现2.6UDP广播实现 3. TCP通信程序3.1TCP发送数据3.2TCP接收数据3.3TCP程序…

什么是BFC(块级格式化上下文)?如何创建一个BFC?

BFC,即块级格式化上下文(Block Formatting Context),是CSS中的一个概念,用于描述页面中块级元素如何布局、定位和相互影响的一种机制。BFC是一个独立的渲染区域,具有一定的规则来决定其中元素的排布方式。 创建一个BFC主要有以下几种方法: 1:根元素()自动创建BFC:…

IDEA 新版本设置菜单展开

使用了新版本的IDEA 新UI后&#xff0c;常用的file&#xff0c;view&#xff0c;菜单看不见了&#xff0c;不太适应&#xff0c;找了一下&#xff0c;有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上&#xff0c;应用保存就可以了

Muse 2获取实时脑电数据

Muse 2获取实时脑电数据 之前转载了一篇知乎大佬汇总的采集Muse数据的博客&#xff0c;从亚马逊中国刷到了一个Muse 2&#xff0c;看了下不到2000块&#xff0c;于是果断下单。。。 历时一个月终于到了。。。 试用 需外网才能获取冥想音频资源&#xff0c;然后才能采集数据…