unittest常用方法介绍及PO模型思想

玩技站长 Auto测试评论211字数 3197阅读模式
unittest介绍
unittest的介绍unittest是python单元测试框架,类似于JAVA的JUnit框架;
Selenium3自动化测试实战――基于Python语言(博文视点出品)
Selenium3自动化测试实战――基于Python语言(博文视点出品)
虫师,2011年6月开始在博客园持续分享测试技术和经验,在自动化测试、性能测试方面有着丰富实战经验,另外,对Web开发技术也有一定的积累。前后担任高级测试工程师、测试开发工程师,以及测试Leader等职位。

单元测试:是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义。接口测试里面,一个接口可以作为一个单元。

unittest核心:TestFixture(脚手架,做一些启动关闭的清理程序)、TestCase(python中方法)、TestSuite(套件)、TestRunner用import语句引入unittest模块测试的类都继承TestCase(class UserTestCase(unittest.TestCase))文章源自玩技e族-https://www.playezu.com/704455.html

unittest集成

setUp()测试前的初始化工作文章源自玩技e族-https://www.playezu.com/704455.html

tearDown()测试后的资源清理工作执行所有用例只运行一次初始化和清理条件,用setUpClass(cls)、tearDownClass(cls)(方法名上标注@classmethod)文章源自玩技e族-https://www.playezu.com/704455.html

(1)所有类中方法的入参为self,定义方法的变量也要,self.变量文章源自玩技e族-https://www.playezu.com/704455.html

(2)定义测试用例,以"test"开头命名的方法,方法入参为self文章源自玩技e族-https://www.playezu.com/704455.html

(3)unittest.main()方法会搜索该模块下的所有以test开头的测试用例方法,并自动执行文章源自玩技e族-https://www.playezu.com/704455.html

(4)自己写的py文件不能用unittest.py命名,不然后找不到TestCase文章源自玩技e族-https://www.playezu.com/704455.html

(5)用例成功是输出.失败是F断言(支持自定义报错信息)文章源自玩技e族-https://www.playezu.com/704455.html

跳过用例方法名称上加上:@unittest.skip文章源自玩技e族-https://www.playezu.com/704455.html

1、日志输出:verbosity默认是1,为0最简洁,不输出每个用例执行结果,文章源自玩技e族-https://www.playezu.com/704455.html

2、输出用例的详细执行结果unittest.main(verbosity=2)测试用例执行的顺序是按照ASCII码执行

3、unittest测试套件TestSuitea用来确定测试用例的顺序,哪个先执行哪个后执行b)如果一个class中有四个test开头的方法,则加载到suite中时则有四个测试用例c)由TestLoader加载TestCase到TeastSuited)verbosity参数可以控制执行结果的输出,0是简单报告,1是一般报告,2是详细报告。默认1会在每个成功的用例前面有个”.“每个失败的用例前面有个”F“testsuite()方法,调用addTest来加载测试用例:类名(‘方法名’)的集合addTest()添加一个测试用例(addTest(类名(方法名)))addTests([类名(方法名),类名(方法名)])

添加多个测试用例例如

suite = unittest.TestSuite()suite.addTest(类名(方法名))runner=unittest.TextTestRunner(verbosity=2)runner.run(suite)

4、TestLoader多个文件测试用例批量加载用例加载器,我们通过把用例都存放在这里,然后再通过Suite进行批量执行,但无法对case进行排序例如:

suite = unittest.TestSuite()  loader=unittest.TestLoader()suite.addTests(loader.loadTestsFromTestCase(类名))

5、Discover多个文件测试用例批量加载常见的用例加载参数:case_dir待执行用例的目录参数:pattern这是匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本参数:top_level_dir这个是顶层目录的名称,一般默认等于None就行了当前文件的路径case_path=os.path.join(os.getcwd,"文件名")

例如:

unittest.defaultTestLoader.discover(case_path,pattern="*Case.py",top_level_dir=None)
PO模式介绍

UI自动化项目分层设计思想(po模式)

PO模式的全名叫做page Object:页面-对象模式。

简单的说就是:一个页面是一个类,元素在页面中,所以每个元素的定位信息是这个类中的一个变量;这个页面的常规业务操作是这个类中的一个个成员方法。

PO模式是自动化测试框架中很重要的一种设计模式。

PO模式的好处就是元素定位信息以页面为单位提取,方便管理,提高后期的维护效率。

PO模式的缺点是进行脚本开发时,需求实例化各个页面的对象,当一个复杂的业务操作牵扯到多个页面时,这种方法就显得有些繁琐。

1、 元素定位按照页面区分,分别存储在不同页面

2、 存储的方式为元组(定位方式,定位表达式),每一个元素定位写好注释是哪个元素,方便重复调用例子:

input_moile=(By.XPATH,'//input[@name="phone"]')

3、 调用方法:先把元素定位引入需要调用的文件,别名统称loc

4、 元素定位命名要见文知意。

5、 有新增的元素定位继续在框架内补充即可页面对象与测试用例分离

  • 1) 页面对象按照不同页面进行存放
  • 2) 页面对象为对页面进行的具体操作(执行用例所需要的步骤,获取断言的比对信息等),每一个操作都写上清晰的注释以方便调用
  • 3)需要初始化一个driver
  • 4)操作中需要调用元素定位层的元素定位进行元素的各种操作
  • 5)每个操作的命名要见文知意注意:要等待元素出现,必要时加入强等待sleep进行等待调用时要注意格式(元组),WebDriverWait可以直接调用,driver.find_element需要*号将元组解包。

1、 测试用例按照测试的不同模块分别存放(可以大模块下面继续细分),每一条测试用例都写上详细的注释,对应测试的功能

2、 继承unittest.TestCase类,需要先引入

3、 测试用例的要素:①前置条件②执行步骤③数据检查及断言

4、 用例的前置后置处理函数处理前置后置条件—

5、调用PageObject来完成用例的执行步骤,完成用例执行结果的断言。

6、执行步骤和断言方式相同的多个用例,可以只写一个用例,用ddt.data来传入数据依次执行(如登录的异常用例等),数据来源于TestData分层。

7、多个用例只打开一次浏览器的操作条件:

  • ①用例之间不能相互影响
  • ②同一个页面对象
  • ③异常用例在前,正常用例在后。

注:用例的执行顺序可以通过用例名字进行控制

1、 测试数据按照测试的不同模块分别存放(可以大模块下面继续细分),每一条数据都写上详细的注释,对应用例

2、 每个模块下的数据分为公共数据和功能模块的数据

3、 功能模块按照测试的功能存放测试数据

4、 数据格式,单条数据使用字典,多条数据使用列表嵌套字典格式,被调用时要用*解包为多个列表将常用的页面操作全部集中在此处,与业务无关,加上完善的异常处理,供后续的所有的页面操作调用。用于存放测试报告,截图,日志等测试过程中输出的文件。

python unittest 在哪个模块里

>>> import unittest>>> unittest.testcase>>> 所以你的是误用标点符号,应该用点你用逗号,当然错了

python 的unittest单元测试框架里,可以对一个test_case 传参数进行参数化吗?

为啥有一个测试用例需要执行多次的需求??ut肯定是不支持的,你可以在ut外围包一层shell或者python,用来识别配置然后调用ut执行即可

 最后更新:2023-2-24
  • 版权提示:本站仅供存储任何法律责任由作者承担▷诈骗举报◁▷新闻不符◁▷我要投稿◁
    风险通知:非原创文章均为网络投稿真实性无法判断,侵权联系2523030730
    免责声明:内容来自用户上传发布或新闻客户端自媒体,切勿!切勿!切勿!添加联系方式以免受骗。
  • 原创转载:https://www.playezu.com/704455.html
    转载说明: 点我前往阅读>>>
匿名

发表评论

匿名网友
确定