首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用协同欺骗测试laravel 5 API?

如何使用协同欺骗测试laravel 5 API?
EN

Stack Overflow用户
提问于 2015-11-02 10:11:07
回答 1查看 2K关注 0票数 4

我是新手,我正在尝试测试我的web服务,我已经建立了使用Laravel 5。我遵循指南这里

因此,我首先创建了一个名为api的套件:

代码语言:javascript
复制
codecept generate:suite api

api.suite.yml

代码语言:javascript
复制
class_name: ApiTester
modules:
    enabled:
        - REST:
            url: http://localhost:8000/api/
            depends: Laravel5

AuthenticateUserCept.php

代码语言:javascript
复制
<?php 
$I = new ApiTester($scenario);
$I->wantTo('authenticate a user');
$I->haveHttpHeader('Content-Type', 'application/x-www-form-urlencoded');
$I->sendPOST('/authenticate', [
    'username' => 'archive',
    'email' => 'admin@admin.com',
    'password' => 'password'
]);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();

我已经用邮递员试过了,它运行得很好。/authenticate路由接受了这3个参数并愉快地发出了一个JWT令牌,但我不能让它使用cannot。

代码语言:javascript
复制
1) Failed to authenticate a user in AuthenticateUserCept (tests/api//AuthenticateUserCept.php)

 Step  I see response code is 200
 Fail  Failed asserting that 500 matches expected 200.

Scenario Steps:

 3. $I->seeResponseCodeIs(200)
 2. $I->sendPOST("/authenticate",{"username":"archive","email":"admin@admin.com","password":"password"})
 1. $I->haveHttpHeader("Content-Type","application/x-www-form-urlencoded")

我哪里出问题了?而且,对于我来说,如何重构这个特定的测试,以便为我提出的其他请求提供一个JWT,对我来说还是很模糊的。任何帮助都是非常感谢的。

编辑api.suite.yml中的更改

代码语言:javascript
复制
class_name: ApiTester
modules:
    enabled:
        - REST:
            url: http://localhost:8000/api/
            depends: Laravel5
    config: 
        Laravel5:
            environment_file: .env.testing
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-02 10:27:57

在我回答之前,我要说几句:

  • 在api.suite.yml中的已启用行中,我包括: enabled: PhpBrowser、REST、ApiHelper。
  • REST行中的url对API套件没有任何影响,它通常只用于验收套件。这应该是通过直接进入代码的路由来完成所有事情,而不是使用phpbrowser模式或类似的方式进行HTTP调用。
  • 与使用PhpBrowser模式不同,您可以使用Laravel5模式--前者将通过中间件发送请求,如果将APP_ENV设置为测试,Laravel5模式将不会通过中间件发送请求。

关于如何解决这个问题,我首先要尝试找出代码在做什么来排除500个错误。您可以做的一件事是尝试在代码中插入一些调试/日志行。另一件事是在测试用例中插入这样的一行:

$I->seeResponseContains('blablabla');

当然,这将失败,但是它将在test /_ output目录中生成一个输出,以便您能够准确地看到您的代码与500错误一起返回了什么响应(当然,您需要在对200条件进行测试之前先这样做,否则您的测试将在该步骤中退出)。

测试用例中这种类型错误的一个常见原因是验证应用于传递给控制器方法的自定义请求类。如果验证失败,那么控制器方法就不会被击中,您将得到一个500错误,而不能在控制器中调试它。我认为这种类型的自定义请求类是个坏主意。

另一个可能的查询是构建一个测试相同路径的功能测试。通过Laravel5辅助模块进行的功能测试通常更容易工作和调试。一旦有了基本的功能测试,并解决了遇到的任何问题,那么API测试就更容易工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33475183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档