安装
# 安装 Node.js apt-get install curl build-essentialcurl https://raw.githubusercontent.com/creationix/nvm/v0.25.1/install.sh | bash. ~/.profilenvm install 0.12.2nvm alias default 0.12.2 # 安装 api-test-runner npm install api-test-runner@latest -g
编写测试用例
'use strict' ###* * A test cases file is a valid node.js module written in coffeescript, * which exports an array of test case declarations to be run. * * You define each case with these basic components: * description: describe what this api do * req: declare the request to send * res: assert the response received, including status code, headers, and body * mongodb: make mongodb operations before or after the test, like setup and teardown in other unit test frameworks * * Supported mongodb operations: insert, remove, update### # Define reusable data as vars, if you don't want to repeat them over and over again auth = username: 'b05eb51341fcdccffb417a1a' password: 'ebfedd3fef00b2b2ee1b3e7c' geoFenceToCreate = name: '上海浦东软件园' circle: center: lng: 121.60 lat: 31.21 radius: 5000 geoFenceCreated = # You can use regular expression to assert string id: /^[0-9a-fA-F]{24}$/ app: 'ba55d7d9472260547a867e00' name: '上海浦东软件园' circle: center: # Nested structure equality comparison like this is supported lng: 121.60 lat: 31.21 radius: 5000 stats: messagePushes: 0 messages: 0 createdAt: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.000Z$/ # Export test cases module.exports = description: 'return 200 with created geo fence' req: method: 'post' url: '/v2/partner/apps/ba55d7d9472260547a867e00/geoFences' auth: auth body: geoFenceToCreate # Arbitrary code get executed before sending the request : # Do something about the request going to be sent res: # Assert the response time shouldn't be longer than 10 seconds timeout: 10 * 1000 status: 200 headers: 'content-type': 'application/json; charset=utf-8' body: geoFenceCreated # Arbitrary code get executed before asserting the response : # Do something about the res going to be asserted # Arbitrary code get executed after asserting the response : # By this way, other cases can use the id geoFenceCreated.id = resbodyid mongodb: # Execute these commands before this test before: collection: 'geoFences' remove: description: 'return 400 when create another one with same name' req: method: 'post' url: '/v2/partner/apps/ba55d7d9472260547a867e00/geoFences' auth: auth body: geoFenceToCreate res: status: 400 description: 'return geo fence previously created in a list' req: method: 'get' url: '/v2/partner/apps/ba55d7d9472260547a867e00/geoFences' auth: auth res: status: 200 headers: 'content-type': 'application/json; charset=utf-8' body: count: 1 list: geoFenceCreated # Use method instead of direct value to delay the computation, so we can use data returned by previous tests -> description: 'return 200' req: method: 'delete' url: "/v2/partner/apps/ba55d7d9472260547a867e00/geoFences/" auth: auth res: status: 200
运行测试用例
api-test-runner --baseUrl http://devapi.tuisongbao.com --mongodbUrl mongodb://localhost/tuisongbao_devOSX --files 'example/*'