4

我想使用 yandex tank 测试我的网络应用程序,我想测试注册,所以我需要发送这样的请求

  • 标题

    POST /registration HTTP/1.1
    Host: localhost:8080
    Connection: keep-alive
    Content-Length: 30
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Origin: http://localhost:8080
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36
    Content-Type: application/x-www-form-urlencoded
    Referer: http://localhost:8080/registration
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: en-US,en;q=0.8,ru;q=0.6
    Cookie: csrftoken=XJ3oheJb0SndHfNAH2lSV2AtKNxxuXdv; JSESSIONID=igq9ejgl10jirr4t73mpjblp
    
  • 表格数据

    login=abracadbra&password=brar
    

是否可以使用不同的登录字段发送这种请求?

4

2 回答 2

6

是的,有可能,对于 POST 请求,您应该使用请求样式的弹药文件,请参阅http://yandextank.readthedocs.org/en/latest/tutorial.html#request-style

您可以将弹药文件指定为命令行参数,或将其放在 [phantom] 部分的 tank .ini 文件中。

请记住,使用幻像作为负载生成器是不可能执行基于场景的测试的,因此您应该提前为请求生成所有必要的数据。Yandex-tank 将根据所需的负载方案发送它。

我不确定 CSRF 保护在您的情况下是如何工作的,如果它不允许对多个请求重复使用 session 和 csrftoken (并且此参数对于注册请求是强制性的),您需要以某种方式获取有效的 Cookie每个生成弹药的请求。在这种情况下,我建议您切换到一些基于场景的工具,即 jmeter。您也可以使用 jmeter 作为 yandex-tank 的负载生成器,请参阅http://yandextank.readthedocs.org/en/latest/configuration.html#jmeter

如果您可以重复使用相同的 Cookie 进行多次注册,弹药文件将是这样的:

649 tag1
POST /registration HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 30
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/registration
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ru;q=0.6
Cookie: csrftoken=XJ3oheJb0SndHfNAH2lSV2AtKNxxuXdv; JSESSIONID=igq9ejgl10jirr4t73mpjblp

login=abracadbra&password=brar

646 tag2
POST /registration HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 27
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/registration
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ru;q=0.6
Cookie: csrftoken=XJ3oheJb0SndHfNAH2lSV2AtKNxxuXdv; JSESSIONID=igq9ejgl10jirr4t73mpjblp

login=sample2&password=brar

...
于 2014-03-11T17:17:42.347 回答
1

还有类似于uri-style 的URI+POST格式,但带有帖子正文:

加载.ini:

ammo_type=uripost

ammo.uripost:

[Host: example.org]
[Connection: close] 
[User-Agent: Tank]  
5 /route/?rll=50.262025%2C53.276083~50.056015%2C53.495561&origin=1&simplify=1
class
10 /route/?rll=50.262025%2C53.276083~50.056015%2C53.495561&origin=1&simplify=1
hello!clas
7 /route/?rll=37.565147%2C55.695758~37.412796%2C55.691454&origin=1&simplify=1
uripost

带有 uris 的行开头的数字是帖子正文的大小。

于 2014-03-12T09:43:16.620 回答