我正在编写一个步骤定义,它将采用http请求类型(get,post等),api的url以及从gherkin发送的数据表。我通过以下方式实现它,但它是一种非常强制性的风格,并不一定对其他测试人员清楚发生了什么。它构建来自像这样的表
的请求| x | y |
| 1 | 2 |
| 5 | 7 |
这样使用JSON发送请求,在这种情况下发送两个请求,使用以下JSON:
{
"x":"1"
"y":"2"
}
和
{
"x":"5"
"y":"7"
}
换句话说,第一行之后的每一行代表一个具有第一行变量特定值的请求。
我的下面的实现,欢迎任何更可读的重构。感谢。
When(/^I submit the following (?:in)?valid data in a "(.*?)" request to "(.*?)"$/) do |request_type, api, table|
data = table.raw
for i in 1...data.length #rows
body = {}
for j in 0...data[0].length #cols
body[data[0][j]] = data[i][j]
end
@response = HTTParty.__send__ request_type, "/a/url#{api}", {
:body => body.to_json,
:headers => { 'Content-Type' => 'application/json' }
}
end
end
答案 0 :(得分:0)
我会写这样的东西:
When(/^I submit the following (?:in)?valid data in a "(.*?)" request to "(.*?)"$/) do |method, api, table|
data = table.raw
keys = data.shift
data.each do |line|
hash = Hash[*keys.zip(line)]
@response = build_request(api, method, hash)
end
end
# with this helper method
def build_request(api, method, hash)
HTTParty.__send__(method,
"/a/url#{api}",
{ :body => hash.to_json,
:headers => { 'Content-Type' => 'application/json' } })
end