测试用例框架

在日常工作中,我们开发功能完成后,往往需要进行测试,保证功能可以正常运行,传统的人工测试有投入高、耗时长等问题,自动化测试框架也应运而生。由于JDA的代码开发采用Python3,其中的unittest测试框架基本可以满足测试需求,在它的基础上封装了RpaTest框架,降低了使用难度。

1. unittest

因为是基于unittest,所以使用前还是需要对这个框架有些简单的了解,首先介绍下原生unittest中几个重要的概念。

  • TestCase:一个TestCase就是一个测试用例,在这个用例内部可以有若干测试函数,并且可以重写特定的函数以实现测试环境的搭建、清理。

  • TestSuite:多个TestCase的集合,TestSuite也可以嵌套。

  • TestLoader:加载TestCase,生成TestSuite。

  • TestRunner:执行TestSuite或者TestCase中的run方法,产生测试结果。

关于unittest更详细的说明可以在网上查找资料,JDA封装后已经简化了很多步骤,平常使用无需再考虑其他细节,只专注于用例编写即可。

2. RpaTest

简单来说,用RpaTest开发测试用例编写代码需要三个步骤。

1、定义用例类,继承自RpaTestCase。

2、定义测试方法,用test开头。

3、执行测试用例。

除了代码之外还需要在设计界面的表格面板添加3列,用于显示结果。

我们用一个例子来说明如何操作。

第一步,编辑测试代码。

from Test.RpaTest import RpaTestCase
from Test.RpaTest import RunTestCase

class MyTestCase(RpaTestCase): 
    def test_one(self):
        """第一个测试函数"""
        pass

    def test_two(self):
        """第二个测试函数"""
        a = 1
        self.assertEqual(a, 2)

RunTestCase(MyTestCase)

这是一段非常基础的单元测试代码,直接复制到JDA的代码编辑器里就可以了。下图详细解释了每一句代码的作用。

dev_first_testcase

第二步,设计结果输出表格。只需要按下图添加3列即可。

dev_table_design

运行结果:

dev_testcase_result

3. RpaTest进阶

大家做测试应该经常会遇到这样的情况,先准备测试环境(比如打开某个网页),进行测试任务,再清理测试环境,如果每一个测试方法都重复编写这些代码效率是非常低的,而且也不利于维护。unittest提供了对应的接口可以实现测试环境相关的处理。

在上一例子代码的基础上稍做修改:

from Test.RpaTest import RpaTestCase
from Test.RpaTest import RunTestCase

class MyTestCase(RpaTestCase): 
    def setUp(self):
        rpa_log('测试前')

    def tearDown(self):
        rpa_log('测试后')

    def test_one(self):
        """第一个测试函数"""
        rpa_log('执行测试一')

    def test_two(self):
        """第二个测试函数"""
        rpa_log('执行测试二')

RunTestCase(MyTestCase)

我们添加了setUp和tearDown两个方法,setUp会在每一个测试方法前运行,tearDown会在每一个测试方法后运行,可以在这两个方法中进行测试环境的搭建和清理。

运行结果:

dev_testcase_result1

从运行日志可以看出,setUp和tearDown在每一个测试方法运行前后都会执行,但有些情况下不需要每次都布置测试环境,只要在测试用例期间布置一次,这种情况也是可以做到的。

再次修改代码为:

from Test.RpaTest import RpaTestCase
from Test.RpaTest import RunTestCase

class MyTestCase(RpaTestCase): 
    @classmethod
    def setUpClass(cls):
        rpa_log('测试前')

    @classmethod
    def tearDownClass(cls):
        rpa_log('测试后')

    def test_one(self):
        """第一个测试函数"""
        rpa_log('执行测试一')

    def test_two(self):
        """第二个测试函数"""
        rpa_log('执行测试二')

RunTestCase(MyTestCase)

setUpClass和tearDownClass在MyTestCase用例执行期间只运行一次,值得注意的是,这两个方法必须用装饰器声明为类方法,写法就是在方法上一行加上@classmethod,原理就不展开介绍了,以后写的用例逐渐复杂时,可以再深入学习Python3来探究。

运行结果:

dev_first_testcase2

4. 附录

最后附上用例中常用的校验结果的方法列表以供参考。

断言 描述
assertFalse(self, expr, msg=None) 验证expr为False,验证不通过时附加msg消息
assertTrue(self, expr, msg=None) 验证expr为True,验证不通过时附加msg消息
assertEqual(self, first, second, msg=None) 验证first == second,验证不通过时附加msg消息
assertNotEqual(self, first, second, msg=None) 验证first != second,验证不通过时附加msg消息
assertIn(self, member, container, msg=None) 验证member in container,验证不通过时附加msg消息
assertNotIn(self, member, container, msg=None) 验证member not in container,验证不通过时附加msg消息
assertIs(self, expr1, expr2, msg=None) 验证expr1 is expr2,验证不通过时附加msg消息
assertIsNot(self, expr1, expr2, msg=None) 验证expr1 is not expr2,验证不通过时附加msg消息
assertLess(self, a, b, msg=None) 验证a < b,验证不通过时附加msg消息
assertLessEqual(self, a, b, msg=None) 验证a <= b,验证不通过时附加msg消息
assertGreater(self, a, b, msg=None) 验证a > b,验证不通过时附加msg消息
assertGreaterEqual(self, a, b, msg=None) 验证a >= b,验证不通过时附加msg消息
assertIsNone(self, obj, msg=None) 验证obj is None,验证不通过时附加msg消息
assertIsNotNone(self, obj, msg=None) 验证obj is not None,验证不通过时附加msg消息
assertIsInstance(self, obj, cls, msg=None) 验证isinstance(obj, cls),验证不通过时附加msg消息
assertNotIsInstance(self, obj, cls, msg=None) 验证not isinstance(obj, cls),验证不通过时附加msg消息
powered by Gitbook修订时间: 2021-04-15 15:56:54

找到相关内容

    未找到""相关内容

    找到相关内容

      未找到""相关内容