ui自动化测试——unittest框架(自动化框架)

news/2025/3/21 18:12:53/文章来源:https://www.cnblogs.com/zz0124/p/18785607

一、自动化框架介绍

1、unittest 框架是python中自带的框架

2、作用:管理和组织测试用例

当我们写的用例越来越多,我们就要考虑用例的编写的规范和组织,以便于后期的维护

3、常见的自动化框架:po框架、pytest 框架、unittest框架(我们讲解)

4、unitest 框架自带标准的库:有如下

a、TestCase类  (测试用例)

b、TestSuite类  (测试套件)

c、TestLoader类   (测试路径)

d、TextTestRunner类  (测试运行)

e、TextTestResult类  (测试结果)

f、TestFixture类   (测试前后准备)

-知识点详解-

  • TestCase:

一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown

  • TestSuite:

对一个功能的测试往往需有多个测试用例,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中

  • TextTestRunner:

是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中

  • TestFixture:

测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。

  • TestLoader:

是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中去执行

5、unittest的框架的结构:

import unittest       #导入unittest框架
import time
from uizdh.HTMLTestRunnerNew import HTMLTestRunner
class Cms(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print("类开始")@classmethoddef tearDownClass(cls) -> None:print("类的结束")def setUp(self) -> None:print("方法开始")def tearDown(self) -> None:print("方法结束")def test1(self):print("1")def test2(self):print("2")def testa(self):print("a")def testA(self):print("A")def dy(self):print("独有")
if __name__ == '__main__':# unittest.main()        #执行所有的用例

类开始

方法开始

1

方法结束

方法开始

2

方法结束

方法开始

A

方法结束

方法开始

a

方法结束

类的结束

*注意点:

  • 类的开始,类的结束,方法开始,方法结束都可以不写
  • 用例要以test开头,如果没有以test开头就不运行
  • test开头的用例运行顺序:  按ascllma标准:0-9  A-Z  a-z
  • 类的开始,类的结束在整个框架中就运行一次
  • 方法开始和方法结束,每一条用例都执行

6、unittest运行用例

1)执行所有用例

import unittest       #导入unittest框架
import time
from uizdh.HTMLTestRunnerNew import HTMLTestRunner
class Cms(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print("类开始")@classmethoddef tearDownClass(cls) -> None:print("类的结束")def setUp(self) -> None:print("方法开始")def tearDown(self) -> None:print("方法结束")def test1(self):print("1")def test2(self):print("2")def testa(self):print("a")def testA(self):print("A")def dy(self):print("独有")
if __name__ == '__main__':# unittest.main()        #执行所有的用例

2)运行部分用例

a、复制代码存在的路径,例如:C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled12\dd\kj1.py

b、点击编辑路径

c、再python添加解释器

d、执行点击右上角的运行

e、代码

import unittest       #导入unittest框架
import time
from uizdh.HTMLTestRunnerNew import HTMLTestRunner
class Cms(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print("类开始")@classmethoddef tearDownClass(cls) -> None:print("类的结束")def setUp(self) -> None:print("方法开始")def tearDown(self) -> None:print("方法结束")def test1(self):print("1")def test2(self):print("2")def testa(self):print("a")def testA(self):print("A")def dy(self):print("独有")
if __name__ == '__main__':# unittest.main()        #执行所有的用例# tj=unittest.TestSuite()       # 创建一个套件对象# tj.addTest(Cms("test2"))             #将单个添加用例到集合中# tj.addTests([Cms("test2"),Cms("testa")])     #将两个或两个以上添加用例到集合中,# unittest.TextTestRunner().run(tj)        #通过testrunner运行套件中的用例

3)执行一个路径下的用例

import unittest       #导入unittest框架
import time
from uizdh.HTMLTestRunnerNew import HTMLTestRunner
class Cms(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print("类开始")@classmethoddef tearDownClass(cls) -> None:print("类的结束")def setUp(self) -> None:print("方法开始")def tearDown(self) -> None:print("方法结束")def test1(self):print("1")def test2(self):print("2")def testa(self):print("a")def testA(self):print("A")def dy(self):print("独有")
if __name__ == '__main__':# 运行py文件的相对路径# path=r"E:\1\python\PycharmProjects\untitled\uizdh"# d=unittest.TestLoader().discover(start_dir=path,pattern="kj*.py")# unittest.TextTestRunner().run(d)

 

4)运用用例后生成报告

  • 固定的报告模板
  • 将报告模板放在pycharm中,可以导入使用
  • 代码
import unittest       #导入unittest框架
import time
from uizdh.HTMLTestRunnerNew import HTMLTestRunner
class Cms(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print("类开始")@classmethoddef tearDownClass(cls) -> None:print("类的结束")def setUp(self) -> None:print("方法开始")def tearDown(self) -> None:print("方法结束")def test1(self):print("1")def test2(self):print("2")def testa(self):print("a")def testA(self):print("A")def dy(self):print("独有")
if __name__ == '__main__':bgpath=r"E:\1\python\PycharmProjects\untitled\uizdh"path=r"E:\1\python\PycharmProjects\untitled\uizdh"d=unittest.TestLoader().discover(start_dir=path,pattern="kj*.py")new=time.strftime("%y-%m-%d %H-%M-%S")file=bgpath+"/"+str(new)+"ui.html"f=open(file,"bw")r=HTMLTestRunner(stream=f,title="ui自动化测试报告",description="用例执行情况",tester="dcs")r.run(d)

  •  运行结果

二、框架流程

讲解1:

流程:

我们要建立这个框架,首先需要导入unittest这个模块,我们做自动化的话还需要导入selenium这个模块,以及一些相关的,比方说time模块,OS模块,HTMLTestRunner模块。把我们需要的模块都导入,在unittest里我们需要去定义一个类,定义类名,继承testcase,一个testcase的实例就是一个用例,类里需要有类的开始:setupclass,以及类的结束:teardownclass,然后我们需要去定义我们的用例,test1,test2,注意一定要以test开头,因为TestLoader只搜索所有以test开头的测试用例。写完用例以后,我们需要去调用它,我们以main作为unittest的入口,执行自动化我们主要有4种调用的方式

第一种用unittest.main()去运行所有用例

第二种是创建一个套件TestSuite(),然后用addtest去添加你要执行的用例,这种方法可以执行部分测试用例,不会全部行

第三种就是搜索绝对路径去执行自动化,调用unittest.testloader.discover方法执行用例

第四种是生成测试报告,搜索绝对路径去执行自动化,调用unittest.testloader.discover方法执行用例,然后把执行结果写入我们导入的模板文件,执行之后就能看到我们路径下所有用例的执行结果。

以上就是unittest框架的整个基本流程

 

讲解2:

建立unittest框架流程:

第一步先导入unittest模块:import unittest;然后导入selenium模块:from selenium import webdriver、时间模块:from time import*等。

第二步定义一个类,给这个类取一个类名,继承unittest.testcase,一个testcase就是一个用例,之后定义一个类方法,类方法要有类的开始(setUpClass)和类的结束(tearDownClass)。

第三步进行方法的开始(setUp),每一条用例执行,他们都去执行,之后是方法的结束(tearDown)。

第四步写用例,用例一定要用test开头=》test1、test2,没有以test开头的用例 ,不被运行。

第五步调用函数,使用main方法(if __name__=='__main__':)进行主函数调用。

第六步执行用例,

第一种可以用unittest.main()运行所有用例;

第二种可以创建一个套件TestSuite(),然后用addtest去添加你要执行的用例,这种方法可以执行部分测试用例,不会全部执行;

第三种搜索绝对路径去执行自动化,调用unittest.testloader.discover方法执行用例;

第四种生成测试报告,搜索绝对路径去执行自动化,调用unittest.testloader.discover方法执行用例,然后把执行结果写入我们导入的模板文件,执行之后就能看到我们路径下所有用例的执行结果。

讲解3:

 下面我介绍一下自动化框架的基本流程:自动化框架是用来管理和组织测试用例的,首先我们先导入unittest框架,再导入本次测试应用到的一些模块,比如time模块(进行计时)等等。接下来我们进行类的定义,创建一个类,一个testcase就是一个用例,继承unittest.testcase,定义类需要类的开始setUpClass()和类的结束tearDownClass() ,在整个框架中只运行一次。为了减少代码的冗余,我们需要进行方法的定义,调用的时候直接使用这个方法名就可以了,方法的开始和结束每一条用例都会执行。然后我们进行用例定义,用例要以test开头,如果没有以test开头就不能运行,运行顺序按ascllma标准排序:0-9  A-Z  a-z。

用例编写完成之后,我们进行用例的调用,这里我们有四种方法:

1.unittest.main() #第一种执行方法,执行所有的用例

2.创建一个套件TestSuite(),通过addtest添加用例到套件中,通过TextTestRunner去运行套件中的用例

3.根据运行文件的相对路径执行自动化测试,通过unittest.TestLoader().discover匹配测试路径和文件, unittest.TextTestRunner().run(d) 运行路径d下的用例

4.根据运行文件的相对路径执行自动化测试,通过unittest.TestLoader().discover匹配测试路径和文件,接下来把执行结果写入我们导入的模板文件,执行之后就能看到我们路径下所有用例的执行结果。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践

通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。…

信创麒麟V10操作系统安装Kong网关

总览 随着国家对信息安全和自主可控技术的日益重视,信创改造正成为各大企业及政府部门的重要任务。公司目前在x86架构的Red Hat系统上部署了Kong网关2.2.1,并且通过官方RPM包实现了快速部署。为了顺应信创转型,现阶段需要在aarch64架构的信创麒麟v10系统上部署Kong网关。 由…

wsl kali 系统安装gvm (openVAS)

1. 更新系统 首先,确保系统是最新的: sudo apt update sudo apt upgrade -y2. 安装GVM(OpenVAS) Kali Linux官方仓库中已经包含了GVM(OpenVAS)的安装包。你可以通过以下命令安装: sudo apt install gvm3. 初始化GVM 安装完成后,需要初始化GVM。运行以下命令: sudo gvm…

day34 rsync备份任务的实战

06-备份任务实战 今天的任务主要以实际备份任务入手,完成综合练习,完成对rsync的综合运用。先看需求 再讲解 再次动手实践客户端需求 客户端需求: 1.客户端每天凌晨1点在服务器本地打包备份(/etc目录和/var/log目录) 2.客户端备份的数据必须存放至以 "主机名_ip地址_当…

dotnet-cnblogs-tool-cnblog

1. 解决的问题: 在本地编辑 md 后,如果有图像,直接复制该 md 到 博客园,或者使用 vscode 插件,会自动上传到博客园,但是上传后,因为没有真正上传图片,图片会无法显示。 2. 解决方法: 参考: dotnet-cnblogs-tool 本文环境为 linux 环境。直接下载 dotnet-cnblogs-tool…

可视化图解算法:链表相加( 两数相加)

对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。1. 题目 描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。 给定两个这种链表,请生成代表…

VUE中使用BroadcastChannel实现同源多页面实时通信

使用BroadcastChannel广播通信 准备工作:1.channel.js文件,内容如下const Channel = {/*** BroadcastChannel对象Map*/channelMap: new Map(),/*** 发送消息,重载方法,可直接调用,省略对象实例化操作* @param {*} channelName 通道名称,用以区分不同的通道* @param {*} o…

halcon 入门教程(五) 缺陷检测

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18785484有兴趣可以多看其他的halcon教程halcon 学习教程目录本篇主要讲一些常见的缺陷检测方法,目前只会讲一些,后面有空的话会不断的补充完整。因为缺陷的种类实在太多太多了,各种各样的缺陷可能都要用各种…

万字长文详解SIFT特征提取

本文对 SIFT 算法进行了详细梳理。SIFT即尺度不变特征变换(Scale-Invariant Feature Transform),是一种用于检测和描述图像局部特征的算法。该算法对图像的尺度和旋转具有不变性,并且在一定程度上能够抵御亮度变化和视角变化,具备较强的鲁棒性。此外,SIFT检测流程还提出了…

记录---学习项目如何用Docker部署

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 写在前面 Docker对比传统虚拟机 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效…

龙信年终技术考核wp

龙信年终技术考核wp 容器密码:MjAyNeWKoOayuQ== 假期里打的第一场取证比赛,一开始名次还挺高,后面服务器不太会做了,排名直接狂掉,获奖的名额太少了。其实上学期打的第一场取证也是龙信办的龙信杯,真的好难,还是这个友好。 1. 分析手机备份文件,该机主的QQ号为?(标准格…

规则系统|第二步 连接数据库

1.输出所有的数据库名2.问一下相关负责人这个需求放到哪个库里ssc: {ENGINE: django.db.backends.mysql, NAME: ssc, USER: star, PASSWORD: dpag5BoORZErhu4ttTju, HOST: 122.5.32.82, PORT: 19336} 3.下载dbeaver,连接相关库 4.用dbeaver手动创建需要的表,这里需要的表如下…