• 如何编写高质量的测试用例?有哪些方法论或原则?


    单元测试用例

    单元测试用例有人总结出来了编写用例的3A原则,分别是

    • Arrange: 初始化测试对象或者准备测试数据

    • Act : 调用被测方法

    • Assert: 断言

    给一个例子

    [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原则也适用于这种测试用例的编写

    • Arrange: 准备测试数据,这里的方案会有很多

    • Act : 使用各种参数调用被测接口

    • Assert: 断言

    举个例子

    
        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/
    右上角出现“你好,amdin”字样
    

    在一些测试团队中,手工测试用例会在测试人员之间进行传播,比如李雷写了手工测试用例,韩梅梅则是用例的执行者。如果李雷的测试用例写的比较抽象派和印象派,韩梅梅是很难去直接执行的,所以会有一些测试团队强调尽量编写可以让人理解,也就是不用脑补的手工测试用例。但是写的越精确花费的时间就越长,如果项目周期紧张的话,是没有充足的时间去写完备的测试用例的。

    在这种情况下,一些有经验的测试人员会写一些测试大纲,相当于是测试备忘录,提醒自己该测哪些情况,不要有遗漏,比如

    登录成功的情况
    登录失败:用户名密码为空
    登录失败:密码不对
    登录失败:只输用户名不输密码
    

    用例的维护

    用例的维护成本往往是很高的

    • 单元测试用例: 被测代码发生变化时单元测试用例需要相应更新
    • 服务间接口用例:被测服务的接口或逻辑发生变化时需要相应更新
    • 手工测试用例:需求变化了用例就要跟着改

    保证用例跟需求的一致性一直是很大的挑战。这也是TDD测试驱动开发所希望解决的问题——如果需求文档直接是可以执行的测试用例,需求跟用例合二为一自然就不存在同步的困难了。

  • 相关阅读:
    MySQL ------ MySQL常用语句的语法 (三十四)
    .NET ----- 多级联动
    .NET ------ 两种传参方式
    .NET----- 对下拉框的控制
    MySQL ------ 改善性能(三十三)
    html5:新特性(新增标签、新增标签属性)
    css:布局技巧(margin负值、鼠标经过显示边框、文字围绕图片显示、三角形使用技巧、css初始化)
    css:vertical-align&文字溢出(vertical-align属性、溢出的文字显示为省略号)
    css:三角&用户界面(三角形效果、鼠标样式、输入框与文本域的优化)
    shiro:入门(概念、RBAC模型、入门程序)
  • 原文地址:https://www.cnblogs.com/nbkhic/p/7127411.html
Copyright © 2020-2023  润新知