解决方案 - 自动化单元测试

简介: 解决方案 - 自动化单元测试

前言

收到读者的咨询,情况是这样的:

“亮哥,看了你最近的 8 篇关于持续交付的文章,想咨询一下对于研发人员有没有可落地的方案,我是 PHP 研发工程师,项目中使用的是 Laravel 框架,负责的是电商业务,如何将持续交付使用起来呢?”

今天有时间,简单整理一下,首先我们要知道持续交付涉及的事情很多,涉及的人员角色也很广,比如包括需求分析人员、技术人员、运维人员、测试人员、客户 等。关于这个问题,文章中理论的部分很到位,目前我们主要从技术人员的角度考虑,做一些 技术导向且支持开发过程的测试 ,实现一个可落地的方案,等拿到代码后就可以在此基础上编写,虽然不是很全面,但可以在此基础上进行扩展。

约定测试 Case

以电商业务为例,简单列举 2 个测试 Case:

  1. 下单(从购物车下单) -> 支付(优惠券 + 余额) -> 发货 -> 收货 -> 评价;
  2. 下单(直接下单) -> 支付(微信) -> 发货 -> 收货 -> 退款(售后);

实际场景中有很多 Case,比如就支付这块就有很多种排列组合,退款这块也会有很多排列组合,原理都是一样的,只要上面的两个会写了,其他的也就都会写了。

项目分析

Case 中的不同环节的不同操作,对于后端来说都是可供调用的 API 接口,其实我们要实现的就是如何自动化按照流程自定义流程顺序调用这些 API 接口。

项目的框架是 Laravel,那么我们考虑的就是在框架中如何编写单元测试代码?这个比较简单,在 tests 目录就可以编写测试用例。

用例编写

安装 orchestra/testbench

composer require --dev "orchestra/testbench"

使用这个包,可以帮助编写 Laravel 项目测试,在这里面可以使用 Laravel 中的一些特性。

创建 BaseTestCase.php

<?php


namespace Tests;


abstract class BaseTestCase extends \Orchestra\Testbench\TestCase

{


}

要注意的是 extends \Orchestra\Testbench\TestCase 而不是 PHPUnit\Framework\TestCase

创建 OrderTest.php

<?php


namespace Tests\Unit;


use Tests\BaseTestCase;


class OrderTest extends BaseTestCase

{

   /**

    * 流程:

    * 1.下单(从购物车下单)

    * 2.支付(优惠券 + 余额)

    * 3.发货

    * 4.收货

    * 5.评价

    */

   public function testCase1()

   {

       // 1.下单(从购物车下单)


       // 2.支付(优惠券 + 余额)


       // 3.发货


       // 4.收货


       // 5.评价


       /**

        * 1.在每个流程中都模拟调用 HTTP API 接口;

        * 2.断言 HTTP 状态码为 200;

        * 3.如果还有业务状态码,需要断言业务状态码为正确返回的状态码;

        */

       

       // 仅做效果演示,断言 200 = 200,总是真

       $this->assertEquals(200, 200);

   }


   /**

    * 流程:

    * 1.下单(直接下单)

    * 2.支付(微信)

    * 3.发货

    * 4.收货

    * 5.退款(售后)

    */

   public function testCase2()

   {

       // 1.下单(直接下单)


       // 2.支付(微信)


       // 3.发货


       // 4.收货


       // 5.退款(售后)


       $this->assertEquals(200, 200);

   }

}

输出结果美化

composer require --dev codedungeon/phpunit-result-printer

使用这个工具,可以让输出结果更加美观、清晰明了。

phpunit.xml 中配置 printerClass = "Codedungeon\PHPUnitPrettyResultPrinter\Printer",例如:

<?xml version="1.0" encoding="UTF-8"?>

<phpunit

   printerClass="Codedungeon\PHPUnitPrettyResultPrinter\Printer"

   colors="true">

   <testsuites>

       <testsuite name="Laravel Test Suite">

           <directory suffix="Test.php">./tests</directory>

       </testsuite>

   </testsuites>

</phpunit>

效果

./vendor/bin/phpunit tests/Unit/OrderTest.php

6bc64bc5d37e27a045349e7b68f8231a.png

两个绿色对勾,表示两个 Case 执行通过。

疑问

一、有同学会说了,这不是自动化的呀,需要手动执行一个命令才行,如果你们发布系统使用的 GitLab,那么在 GitLab 中增加一个环节即可,在这个环节中执行这个命令。

二、如果执行项目内全部的 case 怎么办?命令这样写就可以 ./vendor/bin/phpunit tests

三、Case 一定 API 测试吗?不一定,也可以测试自己的方法。

四、持续集成/持续交付与语言有关系吗?没关系。

小结

以上,就是一个可落地的方案,基本上跑通了,在此基础上编写就可以,根据自己的业务场景去完善吧。

在这做个小调查,大家在项目中都编写测试用例吗,为什么?欢迎大家在留言区评论。

推荐阅读

  1. 持续交付(1) - 软件交付的问题
  2. 持续交付(2) - 配置管理
  3. 持续交付(3) - 持续集成
  4. 持续交付(4) - 测试策略的实现
  5. 持续交付(5) - 部署流水线解析
  6. 持续交付(6) - 构建与部署的脚本化
  7. 持续交付(7) - 提交阶段
  8. 持续交付(8) - 自动化验收测试
目录
相关文章
|
15天前
|
运维 Ubuntu 测试技术
自动化运维的利剑:Ansible在配置管理中的应用软件测试的艺术:探索性测试的深度与广度
【8月更文挑战第27天】 在数字化浪潮中,高效的运维工作是支撑企业IT系统稳定运行的关键。Ansible,作为一款简易而强大的自动化运维工具,正逐渐成为IT专业人士的新宠。本文将通过浅显易懂的语言和生动的案例,带你了解Ansible的核心概念、安装步骤、基础命令以及它在配置管理中的实际应用。我们的目标是让初学者能够轻松上手Ansible,同时为有经验的运维工程师提供一些实用的技巧和思路。
|
1天前
|
安全 JavaScript 前端开发
自动化测试的魔法:如何用Python编写你的第一个测试脚本
【8月更文挑战第41天】在软件的世界里,质量是王道。而自动化测试,就像是维护这个王国的骑士,确保我们的软件产品坚不可摧。本文将引导你进入自动化测试的奇妙世界,教你如何使用Python这把强大的魔法杖,编写出能够守护你代码安全的第一道防护咒语。让我们一起开启这场魔法之旅吧!
|
20天前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
46 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
9天前
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
【9月更文挑战第3天】随着软件行业的迅速发展,代码质量和开发效率变得至关重要。本文探讨了Python在自动化及单元测试中的应用,介绍了Selenium、Appium、pytest等自动化测试框架,以及Python标准库中的unittest单元测试框架。通过详细阐述各框架的特点与使用方法,本文旨在帮助开发者掌握编写高效测试用例的技巧,提升代码质量与开发效率。同时,文章还提出了制定测试计划、持续集成与测试等实践建议,助力项目成功。
32 5
|
8天前
|
数据采集 测试技术 API
在BrowserStack上进行自动化爬虫测试的终极指南
随着互联网的发展,数据价值日益凸显,爬虫技术成为提取网页信息的关键工具。然而,不同环境下的测试与运行挑战重重,特别是在多浏览器、多平台上保证爬虫的稳定性和兼容性尤为困难。BrowserStack作为领先的跨浏览器测试平台,提供了强大的工具和服务。本文将详细介绍如何在BrowserStack上进行自动化爬虫测试,并结合代理IP技术提升爬虫的隐蔽性和成功率。通过具体步骤和案例分析,展示如何利用Selenium、自定义用户代理和Cookie设置来应对反爬虫机制。本指南旨在为开发者提供实用模板,帮助其在多变的测试环境中构建高效的爬虫系统。
|
9天前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
20 2
|
11天前
|
敏捷开发 jenkins 测试技术
自动化测试之美:打造高效软件测试流程
【8月更文挑战第31天】在软件开发的海洋中,自动化测试犹如一艘航船,引导着项目向着质量的灯塔航行。本文将揭开自动化测试的神秘面纱,从基础理论到实践操作,一步步构建起你的测试框架。你将学会如何编写实用的测试脚本,并将其融入日常开发,最终让测试成为敏捷开发不可或缺的力量。让我们启航,探索自动化测试的世界,确保代码之船稳健前行。
|
12天前
|
Web App开发 测试技术 API
自动化测试之美:使用Selenium和Python进行Web应用测试
【8月更文挑战第31天】在软件开发的快节奏世界中,自动化测试如同一束明灯,照亮了质量保证之路。本文将引导你通过Selenium和Python的强大组合,探索如何构建高效的Web应用测试框架。我们不仅会讨论理论,还会深入代码,从一个简单的示例开始,逐步扩展至更复杂的场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。让我们一同揭开自动化测试的神秘面纱,体验它的魅力所在。
|
14天前
|
敏捷开发 测试技术 数据安全/隐私保护
自动化测试的高效之路:如何利用Python和Selenium提升测试效率
【8月更文挑战第28天】本文旨在探讨通过Python语言结合Selenium框架来提高软件测试的效率。文章不仅介绍了自动化测试的基本概念,还提供了具体的代码示例,帮助读者理解如何实现自动化测试脚本,并指出了在实施过程中可能遇到的问题及其解决方案。通过本文,读者将学会如何有效地使用Python和Selenium工具,以减少重复性工作,提升测试流程的效率与准确性。
|
16天前
|
Web App开发 测试技术 持续交付
自动化测试之美:如何利用Selenium和Python提升测试效率
【8月更文挑战第27天】在软件开发的海洋中,自动化测试犹如一艘高速航行的帆船,让质量保证的过程更加迅速而精准。本文将引导你了解如何结合Selenium和Python这两大利器,构建强大的自动化测试框架,从而显著提升测试工作的效率和效果。通过深入浅出的讲解,我们不仅会探索这两个工具的基本使用方法,还会学习如何设计高效的测试用例,以及如何处理测试过程中遇到的各种问题。无论你是测试新手还是希望提高测试技能的开发者,这篇文章都将为你打开一扇通往更高效测试世界的大门。