专栏首页自动化测试实战单元测试框架选择

单元测试框架选择

内容梗概

本文介绍了单元测试的概念,并以Python语言为基础,推荐单元测试框架。

单元测试

1、定义

单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类。

2、为什么要做单元测试

从“基础元件”开测,单元测试对象是代码,以函数或类为单位,完成基础测试,在代码封装成“功能”后,更容易定位功能上出现的问题

3、单元测试用例

通常来讲,单元测试的用例是一个“输入数据”和“预计输出”的集合。 你需要针对确定的输入,根据逻辑功能推算出预期正确的输出,并且以执行被测试代码的方式进行验证,用一句话概括就是“在明确了代码需要实现的逻辑功能的基础上,什么输入,应该产生什么输出”。

4、几个概念

驱动代码、桩代码、Mock代码

驱动代码(Driver)指调用被测函数的代码,在单元测试过程中,驱动模块通常包括调用被测函数前的数据准备、调用被测函数以及验证相关结果三个步骤。驱动代码的结构,通常由单元测试的框架决定。

桩代码(Stub)是用来代替真实代码的临时代码。 比如,某个函数A的内部实现中调用了一个尚未实现的函数B,为了对函数A的逻辑进行测试,那么就需要模拟一个函数B,这个模拟的函数B的实现就是所谓的桩代码。桩代码的应用首先起到了隔离和补齐的作用,使被测代码能够独立编译、链接,并独立运行。同时,桩代码还具有控制被测函数执行路径的作用。

Mock代码和桩代码非常类似,都是用来代替真实代码的临时代码,起到隔离和补齐的作用。但是很多人,甚至是具有多年单元测试经验的开发工程师,也很难说清这二者的区别。

在作者看来,Mock代码和桩代码的本质区别是:测试期待结果的验证(Assert and Expectiation)。

  • 对于Mock代码来说,我们的关注点是Mock方法有没有被调用,以什么样的参数被调用,被调用的次数,以及多个Mock函数的先后调用顺序。所以,在使用Mock代码的测试中,对于结果的验证(也就是assert),通常出现在Mock函数中。
  • 对于桩代码来说,我们的关注点是利用Stub来控制被测函数的执行路径,不会去关注Stub是否被调用以及怎么样被调用。所以,你在使用Stub的测试中,对于结果的验证(也就是assert),通常出现在驱动代码中。

在Python中,我们常用的单元测试框架是unittest、pytest,相比之下pytest更具有学习价值,原因是pytest代码更简洁。而且pytest框架结合selenium做UI自动化也比较方便。如果想看这方面相关文档,大家可以参考悠悠老师的公众号,船长从unittest到pytest都是从悠悠老师那里学习的。

可能单元测试大家做的不是很多,因为单元测试基本都是开发的同事在做,但是这并不妨碍大家学习pytest框架。

不同阶段

自动化分类

1、代码开发阶段——单元测试【pytest、unittest】

2、开发完成——api测试即接口测试

3、页面开发完成稳定后——UI自动化【selenium】

4、上线前性能、安全、兼容性测试【Jmeter】

本文分享自微信公众号 - 自动化测试实战(gh_839e78b6ba28)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 接口测试基础——第9篇 写代码常用的快捷方式

    用户2149234
  • flask第33篇——加载静态文件

    静态文件主要包括css,JavaScript等脚本文件、图片等,在加载文件的时候主要是用url_for方法。

    用户2149234
  • flask第二十七篇——九九乘法表

    用户2149234
  • JS本身并不难,为什么前端学起来感觉很难?

    image.png 这个问题我就不等大家的回答了,相信大家也明白,我并不是闲的无聊这么问。JS本身语法并不难,它困难的地方在哪呢?主要在于以下几点: ? 1,怎...

    web前端教室
  • Xcode创建可复用的代码块 原

            在各种程序开发中,编写代码的效率是非常重要的一个问题,各种优秀的编译器也都有相应的插件用于提高程序员的编码速度。在xcode中,可以通过定义代码...

    珲少
  • 如何让你的代码更简洁?

    “简洁代码”是我在写代码中一直以来遵循的一条理论。事实上,对于我来说,与其说是一种理论,不如说是一种信仰。他是这么一种理念——你的代码必须够简洁且尽可能接近于完...

    用户6543014
  • axis2:用ant脚本生成webservice client 端的java/c代码

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • 马化腾2017两会七大建议完整版

    image.png   3月3日晚间,全国人大代表、腾讯公司董事会主席兼首席执行官马化腾举行媒体见面会,向与会记者介绍了其围绕“大力发展数字经济”、“未成年...

    腾讯研究院
  • 大文件同步时 同步慢、同步中断怎么办?

    现代企业中,企业结构分散化不断扩大,比如多个研发中心、多个分支机构等等,企业需要把内部各种业务数据在多台服务器之间、多个数据中心之间,乃至多云和本地之间调度和同...

    企业文件数据交换
  • TOC投票将Rook移至CNCF孵化阶段

    Rook是Kubernetes的开源云原生存储编排器,它是CNCF在今年1月接受的第一个存储项目。大约8个月后的今天,我们很兴奋地宣布,TOC已经投票决定正式将...

    CNCF

扫码关注云+社区

领取腾讯云代金券