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

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

前言

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

“亮哥,看了你最近的 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) - 自动化验收测试
目录
相关文章
|
6月前
|
设计模式 前端开发 测试技术
告别脆弱:构建稳定UI自动化测试的3个核心策略
告别脆弱:构建稳定UI自动化测试的3个核心策略
627 113
|
7月前
|
存储 关系型数据库 测试技术
玩转n8n测试自动化:核心节点详解与测试实战指南
n8n中节点是自动化测试的核心,涵盖触发器、数据操作、逻辑控制和工具节点。通过组合节点,测试工程师可构建高效、智能的测试流程,提升测试自动化能力。
|
9月前
|
XML jenkins 机器人
JMeter+Ant+Jenkins实现接口自动化测试持续集成
本文介绍了如何使用Ant生成JMeter接口测试报告,并集成到Jenkins中实现自动化测试。内容涵盖Ant与JMeter环境配置、build.xml文件设置、测试执行及报告生成,同时包括Jenkins插件安装、项目配置和钉钉消息通知的集成,帮助实现持续测试与结果可视化。
1128 0
|
7月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
635 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
7月前
|
自然语言处理 前端开发 测试技术
使用 Playwright MCP 实现 UI 自动化测试
本文介绍如何结合Playwright与MCP协议实现智能化UI自动化测试。通过自然语言指令控制浏览器,降低技术门槛,提升效率,并涵盖环境搭建、核心功能、实战案例及最佳实践,展现对话式自动化的未来趋势。
|
9月前
|
人工智能 前端开发 测试技术
如何让AI帮你做前端自动化测试?我们这样落地了
本文介绍了一个基于AI的UI自动化测试框架在专有云质量保障中的工程化实践。
3879 24
如何让AI帮你做前端自动化测试?我们这样落地了
|
7月前
|
安全 BI 持续交付
金融保险行业 AD 域自动化管理解决方案
金融保险行业作为数据密集型领域,核心资产涵盖客户信贷信息、高净值客户数据、绿色金融项目资料等敏感内容,这些数据不仅是企业核心竞争力的体现,更是监管合规的重点关注对象。当前,行业正面临 “管理效率低下” 与 “数据安全风险” 的双重挑战。
248 0
|
9月前
|
Web App开发 开发框架 .NET
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
Pytest 与 Playwright 集成可提升自动化测试效率,支持参数化测试、多浏览器并行执行及统一报告生成。通过数据驱动、Fixture 管理和并行优化,显著增强测试覆盖率与执行速度,适用于复杂 Web 应用测试场景。
|
8月前
|
人工智能 IDE 测试技术
Browser-Use在UI自动化测试中的应用
Browser-Use是一款浏览器自动化工具,具备视觉与HTML解析、多标签管理、操作记录与复现、自定义操作、自我纠正及并行执行等功能,助力AI智能体高效完成网页任务。
1140 0