小九博客

  • 首页
  • 编程开发
  • 信息安全
  • 工具资源
  • 随笔
  • 在线工具
    • 在线图片水印
    • Json解析
    • JavaRuntimeExec
    • 加解密/编码工具集
  • 关于
小九博客
Hack The World!
  1. 首页
  2. 编程开发
  3. 正文

Codeception(三)

2018年01月29日

前言

前两篇文章介绍了安装和单元测试。

这篇文章我们来介绍Fixture概念和功能测试、验收测试。

功能测试和验收测试在Codeception中,部分代码和测试流程很相似,所以我们也来说一下功能测试和验收测试的区别。

Fixture概念

Fixtures 是测试中非常重要的一部分。他们的主要目的是建立一个固定/已知的环境状态以确保测试可重复并且按照预期方式运行。
Yii 提供一个简单可用的 Fixure 框架 允许你精确的定义你的 Fixtures 。

Yii 的 Fixture 框架的核心概念称之为 fixture object 。
一个 Fixture object代表一个测试环境的某个特定方面,它是 yii\test\Fixture 或者其子类的实例。 比如,你可以使用 UserFixture 来确保用户DB表包含固定的数据。 你在运行一个测试之前加载一个或者多个 fixture object,并在结束后卸载他们。

如果使用该功能,记的创建自己的测试DB,并且在test-local里配置DB。该功能在卸载时,会**清空数据库**。 >官方文档:http://www.yiiframework.com/doc-2.0/guide-test-fixtures.html

功能测试和验收测试的区别

  • 功能测试 Functional Testing
     
     功能测试主要用于测试我们是否创建了正确的产品,逐项测试各个功能。
     对于这种类型的测试,要涵盖所有可能情景的测试用例,即使这种情况在“现实环境”中不太可能存在。当进行这种类型的测试时,我们的目标是最大的代码覆盖率。

  • 验收测试 Acceptance Testing

     验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
     这部分测试通常是与客户或内部测试人员合作完成的。
    对于这种类型的测试,我们使用的测试用例涵盖了我们期望软件使用的典型场景。
     该测试主要测试以下几个点
      - 可靠性,可用性:压力测试
      - 扩展性:负载测试进行验证。
      - 可用性:界面是否符合用户习惯等
      - 安全性:代码审计、入侵测试
      - 可维护性:通过演示如何提供软件更新/补丁来验证。
      - 可配置性:通过证明客户如何修改系统配置来满足他们的需求来进行验证。

功能测试

  • 使用模版创建功能测试
    同样的,我们使用模板来创建一个功能测试。

    1
    codecept g:cest functional StudentCest

    创建好的文件会在tests/functional下.内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    namespace backend\tests;
    use backend\tests\FunctionalTester;

    class StudentCest
    {
    public function _before(FunctionalTester $I)
    {
    }

    public function _after(FunctionalTester $I)
    {
    }

    // tests
    public function tryToTest(FunctionalTester $I)
    {

    }
    }

    可以看到内容和之前创建的Test模板很像。

    不同的是,这里的方法多了一个参数functionalTester。

    其实这个参数就是我们在Codeception(二)里面所说的actor概念。传送门:点我跳转

  • 配置
    比如我们这里对登录功能做测试。需要使用到数据库,所以我们首先应配置数据库。

    修改config/test-local.php,如果我们项目中使用了多个数据库,也要配置多个db。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     <?php
    return yii\helpers\ArrayHelper::merge(
    require __DIR__ . '/../../common/config/test-local.php',
    require __DIR__ . '/main.php',
    require __DIR__ . '/main-local.php',
    require __DIR__ . '/test.php',
    [
    'components' => [
    'db' => [
    'dsn' => 'mysql:host=localhost;dbname=yii2-test',
    'username' => '',
    'password' => '',
    ],
    'db2' => [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=yii2-test2',
    'username' => '',
    'password' => '',
    'charset' => 'utf8',
    ],
    ],
    ]
    );
  • 定义Fixture
    定义Fixture,用于指定账号密码登录
    修改刚才模板生成的文件,加入以下方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function _fixtures()
    {
    return [
    'user' => [
    'class' => UserFixture::className(),
    'dataFile' => codecept_data_dir() . 'login_data.php',
    ]
    ];
    }

注:该方法会在Yii2::_before()里自动调用

然后我们需要在tests/_data文件夹下写入登录数据

/tests/_data/login_data.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
return [
[
'username' => 'erau',
'auth_key' => 'tUu1qHcde0diwUol3xeI-18MuHkkprQI',
// password_0
'password_hash' => '$2y$13$nJ1WDlBaGcbCdbNC5.5l4.sgy.OMEKCqtDQOdQ2OWpgiKRWYyzzne',
'password_reset_token' => 'RkD_Jw0_8HEedzLk7MM-ZKEFfYR7VbMr_1392559490',

'created_at' => '1392559490',
'updated_at' => '1392559490',
'email' => '[email protected]',
],
];

  • 编写测试方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
      public function loginUser(FunctionalTester $I)
    {
    $I->amOnRoute('site/login');
    $I->fillField('LoginForm[username]', 'erau');
    $I->fillField('LoginForm[password]', 'password_0');
    $I->click('login-button');
    $I->see('退出 (erau)');
    $I->dontSeeLink('登录');
    }
  • 运行功能测试
    1
    codecept run

    一些其它说明

  1. _before的使用

    比如我们在做登录功能测试时,不仅要测试正确的账号密码是否可以登录,还要考虑用户名密码为空时,是否会显示用户名密码不能为空这样的提示。
    也要测试错误的密码是否会提示密码错误。这就需要我们每次测试之前跳转到登录页面。

    因此可以写如下代码,每次测试时,恢复路由。

    1
    2
    3
    4
    public function _before(FunctionalTester $I)
    {
    $I->amOnRoute('site/login');
    }

验收测试

验收测试编写流程和功能测试大体相同,不再赘述。

标签 单元测试 codeception Yii2
最后更新:2018年01月29日

文章评论

小九

Just For Fun

文章大纲
  1. 前言
  2. Fixture概念
  3. 功能测试和验收测试的区别
  4. 功能测试
  5. 一些其它说明
  6. 验收测试
分类目录
  • 编程开发
  • Yii2
  • 随笔
  • 工具资源
  • Django
  • 信息安全
标签聚合
k8s PHP GD库漏洞 k8s部署 cloudflare 算法
随机 最新 热点
随机 最新 热点
【算法】变量交换 Codeception安装使用(一) 记一次普通的渗透测试 PHP反射机制 Yii2 Event事件-场景应用 PHP-GD库漏洞可导致服务器宕机
OpenSearch集群部署 DNSRebind攻击 MySQL数据同步到ElasticSearch(Logstash方案)爬坑纪实 自动化编排学习(一)部署篇 常见容器漏洞总结 免费CDN加速手把手教程

COPYRIGHT © 2021 小九博客 ALL RIGHTS RESERVED.