3A原则原本是单元测试用例编写时应该遵循的基本原则,不过我们可以扩展到接口的自动化测试用例编写中来。

我们首先看一下3A原则在每一层自动化测试中的具体应用。

单元测试用例

  • Arrange: 初始化测试对象或者准备测试数据
  • Act : 调用被测方法
  • Assert: 断言

给一个例子(c#)

[TestMethod]  
public void Withdraw_ValidAmount_ChangesBalance()  
{  
    // arrange  
    double currentBalance = 10.0;  
    double withdrawal = 1.0;  
    double expected = 9.0;  
    var account = new CheckingAccount("JohnDoe", currentBalance);  
    // act  
    account.Withdraw(withdrawal);  
    double actual = account.Balance;  
    // assert  
    Assert.AreEqual(expected, actual);  
}  

服务间的接口测试用例

服务间的接口测试实际上是黑盒测试,3A原则也适用于这种测试用例的编写

  • A: arrange 初始化测试数据,就是造数据,这里的数据有我们输入的数据,也有目标接口所涉及的资源,比如hr系统中的用户信息,我们必须先有几条人员的详细信息才能去测获取人员信息的接口(当然只是正常的流程,我们有时候还需要清掉数据以便测试资源为空的情况);
  • A: act 调用接口,传入输入数据;
  • A: assert 断言, 对返回的资源信息进行断言,比如获取用户信息的接口返回了用户信息之后,我们要判断返回的用户是不是我们想要的那个用户,我们获取的是李雷的信息,接口如果返回韩梅梅,那么接口的逻辑就是不对的;

举个例子(python)

def test_get_task_by_id(self):
# arrange
        create_task_res = self.create_task('test', 'desc')
        new_id = create_task_res['id']

        # act
        url_for_get_by_id = self.ip + '/api/tasks/' + str(new_id)
        res = requests.request("GET", url_for_get_by_id).json()

        # assert
        self.assertEqual(res['id'], new_id)

手工测试用例

手工的功能测试用例也可以用3A原则来编写。

  • Arrange: 准备被测功能相关的测试数据,比如往系统里录入一批工单以便测试工单的分页功能
  • Act : 调用被测的功能,实际上这就是我们一直讲的测试步骤
  • Assert: 断言

举个例子

# arrange and act
打开chrome浏览器并跳转至http://localhost/wordpress/wp-login.php
在用户名文本框中输入admin
在密码文本框中输入admin
点击登陆按钮
# assert
浏览器跳转到http://localhost/wordpress/wp-admin/
右上角出现“你好,admin”字样

总结

总之对于接口的自动化测试用例说来,遵循3A原则就意味着

  • Arrange: 测试用例执行之前需要准备测试数据,包括需要输入的数据及存量数据
  • Act: 通过不同的参数来调用接口,并拿到返回
  • Assert: 必须做断言,否则用例就没有任何意义了