Unittest
一、用例设计规则
1.unittest
(1)测试类必须继承unittest.TestCase
(2)测试函数必须以"test_"开头
(3)测试类必须有unittest.main()方法
1.unittest前置和后置
(1)通过setup每个用例执行前执行,teardown每个用例执行后执行
(2)通过setupclass类里面所有用例执行前执行,teardownclass类里面所有用例执行后执行
生成报告方式
1.unittest
通过HTMLTestRunner生成
一、unittst框架的作用
当我们写的用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护,而unittest正是这样一款工具
二、unittest是Python自带的标准库中的模块,其中包括:
1、TestCase类
2、TestSuite类
3、TestLoader类
4、TextTestRunner类
5、TextTestResult类
6、TestFixture类
解释下:
TestCase:
一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown
TestSuite:
对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。
常用addTest()方法将一个测试用例添加到测试套件中
TextTestRunner:
是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中
TestFixture:
测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。
TestLoader:
是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中
如何分析是前段还是后端的问题
(1)检查接口,前端和后台之间是通过接口文件相互联系的,需要查看接口文件
(2)检查请求的数据是什么,反馈的数据又是什么
(3)根据接口文件,检查数据是否正确。如果发送的数据是正确的,但是后台反馈的数据是不符合需求的,那就是后台的问题;如果前端没有请求接口或请求的时候发送数据与需求不符,那这个时候就是前端的问题了。
(先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题)
那我给你讲下我上个项目的自动化开展过程吧,我上个项目是叫掌中财富,是一个借贷平台。
我们主要是对我要出借、我要借款、我的账户等模块进行了自动化测试。
我们公司采用的是Python结合selenium进行自动化测试的,使用的是unittest框架。
那为了方便后期对用例的管理和维护,我会进行模块的分层处理。
主要分为:公共模块(主要是写入一些经常要用到的函数,比如登录)、数据模块、报告模块、执行用例的模块以及编写用例模块
。那接下来我就以“我要出借”流程为例跟你讲解一下吧
首先要导入对应的库,from selenium import webdriver和import unittest,
分别导入selenium库和unittest库,然后新建一个继承unittest.testcase类的我要出借的类,
我一般会把需要的前置条件在setup结构中编写,像webdrvier.chrome()选择谷歌浏览器,
然后用dr.get方式获取网址打开,为了避免页面元素被遮挡定位不到而报错的现象,
我会用maximize_window将浏览器最大化处理。因为有时候用例执行太快,而网页加载太慢会导致报错
,所以我一般都会用implicitly_wait进行智能等待,确保页面加载完成后再执行下一步。
那在进行我要出借之前,需要先进行登录,因为之前我已经将登录写到公共模块了,
所以我这边直接调用就可以了。登录成功后,进入首页会弹出一个存管账户,
它是一个iframe弹框,我们可以直接叉掉他,或者进行注册,因为后续要进行出借的功能,
必须要开通第三方存管账户才能完成。所以首先我们用switch_to_frame进入弹框,
然后用id定位,并用send_keys编写里面的内容,最后用switch_to_default_content退出iframe弹框完成注册。
之后的话是进行‘我要出借’,我要出借是一个隐藏列表,所以要先导入对应的模块,
from selenium.webdriver.common.action_chains import ActionChains,
用find_element_by_id的方式定位我要出借,然后用actionchains(dr).move_to_element().perform把鼠标移动到隐藏列表中,
最后用xpath定位选择我要出借里面的一个标的。就以新手标为例,
进入到新手标页面之后,里面有很多出借的项目,
那我们可以用find_element_by_name点击其中一个具体的项目进行出借。
因为这里新开了一个的窗口,所以需要用到dr.switch_to_window去切换窗口才能进行下一步。
切换窗口的话有两种方式,一种是通过句柄切换,一种是通过索引切换,
我一般用索引切换窗口比较多也比较方便。这时候为了保证用例执行的准确性,
我会进行断言,首先dr.title获取title信息,之后用if语句来判断获取到的title信息是否与实际的相符,
如果不一致输出原因,并用dr.get_screenshot_as_file('e:\\bieyao\\error.png')进行截图。
一致的话则执行下一步操作。然后用id定位方式出借金额,为了提高效率,我是之前已经写好了随机生成金额的关键字
,所以我这边直接调用就可以了。最后用link_test定位点击立即出借就完成了整个出借的过程。
在还原环境teardown的时候用dr.quit()将浏览器关闭,进行扫尾工作。
最后就是在执行模块执行用例并生成测试报告,首先需要导入生成报告所需的模块HTMLTestRunnerCN
,用unittest.defaultTestLoader.discover(test_dir,pattern='kj2.py')方法把当前文件所有test开头的用例集合在一起
,然后定义好报告的保存路径,用HTMLTestRunnerCN.HTMLTestRunner把steam、title(报告标题)、description(用例执行详情)、
tester(测试人员)等进行编写,最后用run的方法运行,执行完成之后可以在你保存的路径下,
找到生成的报告进行总结分析。以上就是我大概的一个自动化开展过程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架