• 自动化总结(二) Unittest的应用


      自动化测试中,入门最快的应该是基于界面模拟用户操作的UI自动化,但是如果说实用性最高的当属接口自动化。但是不论是哪种自动化测试,都只存在细节上的差异,整体结构都是类似的。

      如果将自动化脚本比作一个人,那么框架就是骨骼,驱动是肌肉,各类封装方法代表器官,参数是血液,最后的平台集成就是皮肤。

      先说骨骼,也就是构建自动化测试的框架,当前主流的框架为Python的Unittest和Pytest、Java的JUnit和TestNG等等。Python语法和动态类型,以及解释型语言的本质,是新手比较容易掌握的语言,就个人而言,选择的也是基于Python语言的Unittest和Pytest框架交替使用。

      Unittest框架中有4个重要的概念:test fixture、test case、test suite、 test runner。

      Testcase:一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码 (run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通 过运行这个测试单元,可以对某一个问题进行验证。

      Test suite:多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。

      Test runner:是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法,入参为suite测试套件。

      TestLoader:是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。

      Test fixture:对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现。这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大。

      其他的还有:

      Test main():使用她可以方便的将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。 

       Test defaultTestLoader:defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。用法如下:

      discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

      Test skip:unittest.skip()装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

      @unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。

      @unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。

      @unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。

      @unittest.expectedFailure(): expectedFailure()测试标记为失败。 

      然后通过查看unittest的源码,来看一下这几个概念,以及他们之间的关系,他们是如何在一起工作的,其静态类图如下:

      整个流程是很清晰的,首先是要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。

    测试的基础就是TestCase,也就是用例的编写,用例的开始需要对测试做前期准备,用例结束则需清理环境,保证下一个用例在合适的环境下进行。

      unittest注意点:

    1. 导入unittest模块
    2. 类名的第一个字母大写;
    3. 类要继承unittest.TestCase;
    4. 测试函数前必须加test,否则不会被当作测试用例来执行;
    5. setUp()和tearDown()方法每个测试用例都会执行

      

  • 相关阅读:
    HDOJ/HDU 2352 Verdis Quo(罗马数字与10进制数的转换)
    HDOJ/HDU 2203 亲和串(简单的判断~Java的indexOf()方法秒)
    HDOJ/HDU 2163 Palindromes(判断回文串~)
    js之函数
    js琐碎知识点
    position
    css属性background
    图片展示失效容错处理
    文字打点
    浮动的一些知识点
  • 原文地址:https://www.cnblogs.com/keima/p/14823318.html
Copyright © 2020-2023  润新知