多测师讲解课堂(012) _ Unittest框架(006)_高级讲师肖sir(unittest)


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的方法运行,执行完成之后可以在你保存的路径下,
找到生成的报告进行总结分析。以上就是我大概的一个自动化开展过程

原文地址:https://www.cnblogs.com/xiaolehua/p/14075520.html