开发资源
- php(下载WampServer集成php mysql apache等)
- composer(php依赖包管理工具,集成了codeception)
- yii2(https://www.yiichina.com/doc/guide/2.0,包含codeception和yii2的安装使用指南)
wampServer和composer的windows版资源:链接:https://pan.baidu.com/s/1JENZVCQrllpcwd_Yj24PMg 提取码:a1hq
phpstorm2019资源:链接:https://pan.baidu.com/s/138wO7G1teWpycuZzPpjG4A 提取码:q0i3
codeception与Yii2集成的测试方法文档:https://codeception.com/docs/modules/Yii2.html#seeRecord
创建基本测试套件 (涵盖了单元、功能、验收测试)
codecept bootstrap
Api测试需要另外创建套件
codecept g:suite api
运行测试
codecept run
运行详细输出
codecept run api xxx -vvv
codecept run api xxx --steps
生成测试报告,生成HTML和XML报告。报告将存储在tests/_output/目录中
codecept run --steps --xml --html
codeception全局配置
配置需要用到的Actor,套件配置类似
文件配置:codeception.yml
actor:FunctionalTester/ApiTeser/UnitTester/AcceptanceTester
modules:
config:
-Yii2:
configFile:'config/test.php'
enable:
-PhpBrower:
url:xxx //网页可以用phpBrower虚拟浏览器
-WebDriver:
url:xxx
brower:chrome //真实浏览器
-Db:
dsn:xxx //数据库声明用db模块
使用WebDriver、PhpBrower可以加个REST,使用depends解决冲突
Codeception语法
动作类
$I->click('Login');
$I->fillField('#input-username', 'John Dough');
断言类
$I->see('Welcome');
$I->dontSeeElement('#error-message');
抓取类
$method = $I->grabAttributeFrom('#login-form', 'method');
$I->assertEquals('post', $method);
包含yii集成的codeception测试函数的介绍
'https://codeception.com/docs/modules/Yii2.html'
API测试
SOAP和REST作为标准,在REST/SOAP Web服务是通过HTTP访问的标准方法
api套件配置
actor: ApiTester
modules:
enabled:
- REST:
url: 'http://serviceapp/api/v1/'
depends: PhpBrowser
class SigninCest
{
function _before(AcceptanceTester $I)
{//测试前运行的操作,数据库的表更新...}
public function _after(AcceptanceTester $I)
{ }
public function tryToTest(AcceptanceTester $I)
{//测试用例}
}
Api自动化实操:
同一个接口有多个场景可以用多个function来覆盖,变更传参等即可。
class UserImportCest
{
const URL = 'fbcc/user/import-user'; //接口url
static $TABLES = [ //表名称
'sys_log_opt_v2',
'fbcc_user',
'fbcc_user_batch',
];
public function _before(ApiTester $I) //ApiTester是codeception生成的apiActor
{
$I->runSql(static::$TABLES); //执行sql
}
public function normalFileTest(ApiTester $I)
{
//参数
$params = [
'batch_id' => '2',
'language' => 'en,en-US',
'automatic_timezone' => '1',
'domain_name' => 'facebook.com'
];
//需要上传的文件的绝对路径
$files = ['user_file' => 'tests/_data/upload_files/normal_import_user_file.xlsx'];
//登录Actor
$I->loginSuperAdmin();
//给api传参,这里用的是POST,还有GET等
$I->sendPOST(static::URL, $params, $files);
//可以查看response的json数据包含是否有你想要的数据
$I->seeResponseContainsJson(["code" => 0, 'msg' => 'Success']);
$fbccUserModel = 'app\modules\common\models\fbcc\FbccUserModel';
//查数据库的内容,看是否已经插入或者修改等
$I->seeRecord($fbccUserModel, [
'login_user' => 'exceed1',
'ip' => '118.136.48.87',
'original_ip' => '118.136.48.87',
]);
//查看日志
$I->seeLog('import-user');
}
}
同一个接口,如果方法可以复用可以用循环来简化代码。
class GetUserCountCest
{
const URL = 'fbcc/user/get-user-count';
static $TABLES = [
'fbcc_user'
];
public function _before(ApiTester $I)
{
$I->loginSuperAdmin();
}
public function testGetUserCount(ApiTester $I)
{
$param = [
'1' => [],
'2' => ['login_user' => 'gmail'],
'3' => ['login_status' => '1'],
'4' => ['area' => 'ID'],
];
$resp = [
'1' => '{"data":{"total":"7"},"code":0,"msg":"Success"}',
'2' => '{"data":{"total":"5"},"code":0,"msg":"Success"}',
'3' => '{"data":{"total":"5"},"code":0,"msg":"Success"}',
'4' => '{"data":{"total":"6"},"code":0,"msg":"Success"}',
];
foreach ($param as $key => $value) {
$I->wantTo("Get User Count".$key);
$I->runSql(static::$TABLES);
$I->verifyResp(static::URL, 'get', $value, 200, $resp[$key]);
}
}
}