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

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

前言

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

“亮哥,看了你最近的 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) - 自动化验收测试
目录
相关文章
|
3天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
19天前
|
前端开发 JavaScript 测试技术
前端自动化测试
前端自动化测试是通过使用工具和脚本自动执行测试用例的过程,旨在提高测试效率、减少人为错误,并确保Web应用的功能在不同环境和设备上的一致性与稳定性。
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
95 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
17天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
25天前
|
机器学习/深度学习 SQL 安全
如何确保自动化安全测试的全面性和准确性
确保自动化安全测试的全面性和准确性,需集成多种工具(如SAST、DAST、IAST、SCA),编写自动化测试脚本,融入CI/CD流程,定期更新测试用例和工具,使用真实数据,持续维护代码,模拟攻击场景,运用机器学习,采用智能测试平台,并结合手动测试。这些策略有助于及时发现并修复安全问题,提升软件安全性。
|
28天前
|
机器学习/深度学习 监控 算法
车辆违停检测:基于计算机视觉与深度学习的自动化解决方案
随着智能交通技术的发展,传统人工交通执法方式已难以满足现代城市需求,尤其是在违法停车监控与处罚方面。本文介绍了一种基于计算机视觉和深度学习的车辆违停检测系统,该系统能自动监测、识别并报警违法停车行为,大幅提高交通管理效率,降低人力成本。通过使用YOLO算法进行车辆检测,结合区域分析判断车辆是否处于禁停区,实现了从车辆识别到违停判定的全流程自动化。此系统不仅提升了交通管理的智能化水平,也为维护城市交通秩序提供了技术支持。
|
1月前
|
运维 监控 关系型数据库
数据库管理中的自动化运维:挑战与解决方案
数据库管理中的自动化运维:挑战与解决方案
|
1月前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
1月前
|
机器学习/深度学习 SQL 安全
如何确保自动化安全测试的全面性和准确性?
如何确保自动化安全测试的全面性和准确性?
|
2月前
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
115 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
下一篇
DataWorks