代码级接口测试与单元测试的区别

关于接口测试

接口测试是一个比较宽泛的概念, 近几年在国内受到很多企业和测试从业者的追捧, 尤其是上层的UI在取悦用户的过程中迭代更新加快, UI自动化维护成本急剧上升的时代, 大家便转向了绕过前端的接口层面进行测试. 但是很多人, 对接口测试的理解并不完整, 事实上, 我们无论通过何种方式运行一段程序, 都必须调用该程序的接口才能实现.

比如, 我们通过登录页面输入账号和密码, 点击 登陆按钮, 最终该操作会被封装成一个HTTP请求, 发送给后台服务器, 后台服务器会直播调用登录接口, 来运行登陆的实际代码.

代码级接口测试与单元测试的区别_第1张图片 

在这个过程, 点击"登录"按钮是一个前端界面, 如果通过该方法来观察其运行状态, 那么我们就称之为界面级的黑盒测试, 俗称"点点点". 我们也可以利用各种工具, 比如Fiddler, Postman, SoupUI, 甚至使用代码发送数据给后台服务器, 进而观察其运行结果的, 这些, 我们称之为协议级的接口测试. 这部分是大家经常提级的接口测试, 我就不再继续赘述了.

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

当然, 我们还可以从代码层面来直播调用该登录接口, 那么 此时就称之为代码级的接口测试.

比如, 以下是一个简易的在线的计算器的源代码:

class Cal:
    def add(self, a, b):
        return a+b

    def minus(self, a, b):
        return a-b
    
    def mul(self, a, b):
        return a*b
    
    def div(self, a, b):
        return a/b

我们大概率是拿不到源代码的, 但是可以拿设计文档, 这几个方法所需要的参数, 以及类型都是可以拿到, 比如:

代码级接口测试与单元测试的区别_第2张图片

由于我们只是调用接口, 只是接口的层次已经更接近底层代码了, 但是依然看不到代码, 所以, 我们依然需要使用用例的设计方法去设计我们的传入参数, 对div这个方法进行演示:

  • 整数相除
  • 小数相除
  • 除数为0
  • 输入字符串
  • 输入特殊字符
  • 超长的数字
  • 被除数为空
  • 除数为空
  • .........

以上, 有没有发现, 像极了使用等价类对页面的输入框进入用例设计. 是的, 没错.

因此, 我们就可以直接调用这些方法, 使用设计好的数据对它进行测试. 以下是使用unittest框架对它进行的测试, 写两条除法的测试用例供演示使用:

import unittest

class TestCal(unittest.TestCase):
    def test_div01(self):
        cal = Cal()
        result = cal.div(15,3)
        self.assertEqual(result, 5)

    def test_div02(self):
        cal = Cal()
        result = cal.div(15,0)
        self.assertIn('分母不能为0',result)

if __name__ == '__main__':
    unittest.main()

以下是测试结果:

代码级接口测试与单元测试的区别_第3张图片

 

最后, 我们还可以深入到代码实现层, 对代码的实现逻辑进行详细的测试, 常用的方法有

  1. 语句覆盖
  2. 判定覆盖
  3. 条件覆盖

我们又称之为白盒测试单元测试

看到了吧, 这三种测试方法:

  1. 黑盒测试(从UI去)
  2. 协议级的接口测试(发送HTTP请求)
  3. 代码级的接口测试

以上方法的测试, 整个过程唯一的区别公在于我们调用该计算器的方式不一样, 最终真正工作的, 都是同样的一段代码, 这个本质是绝对不会因为被调用的方式不同而发生一丁点儿的变化. 所以, 任何一种调用的方式, 都在驱动程序运行而已, 本质上来说, 他们所做的事情没有任何区别.

因此, 正是因为接口测试的所谓接口, 是一个不太容易下定义的概念, 所以我们千万不能盲目地认为, 只有协议级的测试才是接口测试, 或者代码级的测试才是接口测试, 这些理解都太过绝对. 事实上, 通过页面上的操作, UI-User Interface, 用户界面, 直译用户接口, 这些页面的操作入口, 也是一个一个的接口啊. 所以, 请大家不要纠结于概念本身, 本文不是要去教大家如何抬杠, 而是明白, 我们的测试确实可以多样化, 可以更多地专注于从不同角度来完成对一个功能的测试, 进而达到更全面的测试覆盖, 尽早地找出Bug才是王道.

你可能感兴趣的:(单元测试,软件测试,程序员,接口测试,自动化测试,测试工程师)