IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 代码质量之codeception(一) -> 正文阅读

[开发测试]代码质量之codeception(一)

codeception 简介

Codeception 的主要概念之一是将测试表示为一个人的行为。我们有一个 UnitTester,他执行函数并测试代码;有一个 FunctionalTester,一个合格的测试员,他测试整个应用程序,并了解其内部结构;还有一个ApiTester,他能够测试应用程序的接口,断言接口返回数据;最后,我们有一个 AcceptanceTester,一个通过我们提供的界面使用我们的应用程序的用户;

UnitTester 单元测试

Codeception 是在PHPUnit之上创建的。如果有使用 PHPUnit 编写单元测试的经验,则可以继续这样做。Codeception 执行标准的 PHPUnit 测试没有问题,但是,Codeception 本身构建了一些执行的动作作为unitTester 来反应测试角色,整个过程非常直观;比如继承了php unit 的assertEquals,同事又封装了see*,dontsee*,grab 等方法

    public function testSavingUser(\UnitTester $I)
    {
        $user = new Users();
        $user->setName('Miles');
        $user->setSurname('Davis');
        $user->save();
        $I->assertEquals('Miles Davis', $user->getFullName());
        $I->seeRecord('users', [
            'name' => 'Miles',
            'surname' => 'Davis'
        ]);
    }

执行测试命令

$ php vendor/bin/codecept run unit --steps

控制台输出

UserTestCest: Test saving user
Signature: models\UserTestCest:testSavingUser
Test: tests/unit/models/UserTestCest.php:testSavingUser
Scenario --
 I assert equals "Miles Davis","Miles Davis"
 I see record "app\models\Users",{"name":"Miles","surname":"Davis"}
 PASSED 
 

FunctionalTester 功能测试

功能测试可以模拟返回 HTML 响应的 Web 请求( G E T 和 _GET和 G?ET_POST变量)。在测试中,您可以对响应进行断言,并且可以检查数据是否成功存储在数据库中;

功能测试可以让我们的测试功能运行的更快,但是也能详细的展现出异常;

$I->amOnPage('/');
$I->click('Sign Up');
$I->submitForm('#signup', ['username' => 'MilesDavis', 'email' => 'miles@davis.com']);
$I->see('Thank you for Signing Up!');
$I->seeEmailSent('miles@davis.com', 'Thank you for registration');
$I->seeInDatabase('users', ['email' => 'miles@davis.com']);

以上是官网的demo, 不管是amOnPage 还是amOnPage 都是指向前端的页面,对于分离的项目可能就不是很合适了;

ApiTester 接口测试

相比于功能测试,接口测试可能更适合前后端分离的项目,ApiTester的提交不设计前段页面的表单,可以直接通过post,get方法发送接口请求

Codeception 允许SOAP 和 REST 两种标准测试 Web 服务。
REST Web 服务是通过 HTTP 使用标准方法访问的:GET、POST、PUT、DELETE。它们允许用户从服务接收和操作实体。
SOAP Web 服务通常更复杂。您将需要配置了 SOAP 支持的PHP 。还需要具备良好的 XML 知识。SOAP模块使用特殊格式的 POST 请求连接到 WSDL Web 服务
访问 WebService 需要一个 HTTP 客户端,因此要使用它,您需要设置模块PhpBrowser或yii,laravel等框架模块之一
通常都是设置框架模块

配置模块api.suite.yml:

actor: ApiTester
modules:
    enabled:
        - REST:
              url: /api/
              depends: Yii2

eg:登录验证并访问首页


	private $bearer;
    private $tester;

	//前置操作   登录用户
    public function _before(\ApiTester $I)
    {
        $I->sendPost('/rest/login', [
            'username' => 'admin',
            'password' => 'admin'
        ]);
        $token = $I->grabDataFromResponseByJsonPath('$.data.token');
        return 'Bearer ' . $token[0];
    }

    // tests
    public function testIndex()
    {
        $this->tester->haveHttpHeader('Content-Type', 'application/json');
        $this->tester->haveHttpHeader('Authorization', $this->bearer);
        $this->tester->sendGet('/index/index');
        $this->tester->seeResponseCodeIs(HttpCode::OK);
    }
    

AcceptanceTester 验收测试

通过打开浏览器、访问站点、单击链接、填写表格以及实际查看网页上的内容。他们不需要知道编程语言、框架、数据库、网络服务器,或者应用程序为什么会(或没有)按预期运行;

配置模块acceptance.suite.yml:

# acceptance.suite.yml
actor: AcceptanceTester
modules:
    enabled:
        - PhpBrowser:
            url: http://www.example.com/
        - \Helper\Acceptance

总结

1.codeception 对于开发来说可能需要关注的是UnitTester,ApiTester.因为前后端分离是主流思想
2.codeception自带的模块确实省略像phpbrowser 的安装配置
3.codeception封装方法很拟人化,简单又方便,即BDD的通用语言是一种近乎自然语言的描述软件的形式

UnitTesterFunctionalTesterApiTesterAcceptanceTester
测试范围单个 PHP 类PHP 框架(路由、控制器等)接口浏览器中的页面(Chrome、Firefox 或PhpBrowser)
测试计算机需要访问项目的 PHP 文件YYdepends: PhpBrowser 不需要N
需要网络服务器NNdepends: PhpBrowser 需要Y
JavaScriptNNNY
需要额外的软件NNNSelenium 用于浏览器测试
速度相对快
配置文件unit.suite.ymlfunctional.suite.ymlapi.suite.ymlacceptance.suite.yml

在这里插入图片描述

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:29:45  更:2021-07-22 14:31:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 1:13:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码