2

我对artillery.io 很陌生,我遇到了问题。我想从 JSON 响应中获取一个值并在 'expect' 子句中检查它,所以我这样做是这样的:

config:
  target: 'https://api.duckduckgo.com'
  plugins:
      expect: {}
  phases:
    - duration: 1
      arrivalRate: 1
scenarios:
   - flow:
      - get:
          url: "/?q=cao&format=json"
          capture:
            - json: $RelatedTopics[0].FirstURL
              as: url
          expect:
            - statusCode: 200
            - equals:
              - "{{ url }}"
              - "https://duckduckgo.com/209/Cao_Wei"
      - log: "url is {{ url }}"

然后我这样称呼大炮:

artillery run duck.yml

然后我得到这样的东西:

User variables:
     target : https://api.duckduckgo.com
     $environment : undefined
     $uuid : 0774da00-b6e6-415c-bd28-0ff4bedd07ec
  not ok equals , https://duckduckgo.com/209/Cao_Wei 
  expected: all values to be equal
       got: , https://duckduckgo.com/209/Cao_Wei
  Request params:
    https://api.duckduckgo.com/?q=cao&format=json
    ""

我省略了其余的输出,因为它太大了。当它说“不等于,https://duckduckgo.com/209/Cao_Wei ”时,我觉得我的url变量是未定义的。

在像“$RelatedTopics[0].FirstURL”这样的引号上使用 JSONPath 会产生同样的问题。

我安装了期望(https://artillery.io/docs/plugin-expectations-assertions/)插件,如下所示:

npm install -g artillery-plugin-expect

请问,我在这里错过了什么?

4

1 回答 1

0

如果您升级到插件的最新版本(1.2.1),问题应该会消失,早期版本在equals涉及捕获的变量的比较中存在错误(参考:https ://github.com/artilleryio/artillery-plugin-expect /拉/4

于 2018-12-20T17:16:23.123 回答