我想要测试此网络服务http://qa-takehome-creyzna.dev.aetion.com:4440
。我有身份验证详细信息(用户名和密码),该服务具有以下端点:/login, /user/, /user/{id} and /user/search
。对于除/ login之外的所有端点,需要将授权令牌作为HTTP头传递。
该服务公开一个登录端点(/ login),该端点接受带有两个参数的POST请求:用户名和密码。成功登录后,将返回一个身份验证令牌,该令牌必须用于向服务发出其他请求。例如,如果请求如下,
{
"username": "admin",
"password": "admin"
}
它可能会返回{ "token": "1234-0009-999" }
并且此令牌将需要提出额外请求。
我需要对Web服务进行身份验证,创建10个用户,然后检索该信息以验证用户是否已正确创建。我想在Eclipse中开发一个测试计划并实现。我该如何开始?
答案 0 :(得分:2)
Web服务基本上是Java Servlet的扩展,其中输入处理得更多,输出很少是HTML页面。
Netbeans有一个关于如何建立Web服务的优秀教程,如果您遵循它,您可以在一小时内运行基本的Web服务。
https://netbeans.org/features/java-on-server/web-services.html
不要被认为必须使用一个IDE(我喜欢netbeans,但其他人没有)或其他IDE。花哨的GUI工具只是编写可能使用其他普通Java工具的普通Java类(如果使用XML等,则使用JAXB)。
Web服务不仅仅是接受特定类型请求的Web服务器,而是响应特定类型的响应。在Java中,通过利用Servlet使Web服务器更易于使用。 Servlet的内部内容看起来像
Unpack the request
Validate the request is complete, report an error response if not
Act on the reqeust
Generate a response in the appropriate format
Send the response back as the reply.
---根据要求编辑---
对不起,对我来说这似乎太明显了。让我填补空白。很抱歉对细节进行了修饰。
public class MockHttpServletRequest implements HttpServletRequest {
@Override
public String getAuthType() {
throw new UnsupportedOpertationException("unexpected method use");
}
@Override
public String getContextPath() {
throw new UnsupportedOpertationException("unexpected method use");
}
... repeat for all methods ....
}
public class ItemRequestWithBadEncoding extends MockHttpServletRequest {
@Override
public String getMethod() {
return "GET";
}
@Override
public String getHeader(String name) {
if ("content-type".equals(name)) {
return "text/plain-ish"; // this is not a mime-type
}
throw new IllegalArgumentException(String.format("this mock doesn't support %s", name);
}
... fill out the rest of the required request details ...
}
public class CapturingServletResponse implements HttpServletRespose {
private final ArrayList<Cookie> cookies = new ArrayList<Cookie>();
@Override
public void addCookie(Cookie cookie) {
cookies.add(cookie);
}
public List<Cookie> getCookies() {
return Collections.unmodifiableList(cookies);
}
... override other methods and capture them into per-instance fields
with ability to return unmodifiable references or copies to them ...
}
现在回到测试框架
@Test
public void testItemFetch() {
try {
MockRequest request= ItemRequestWithBadEncoding();
CapturingServletResponse response = new CapturingServletResponse();
Servlet itemRequestServlet = new ItemRequestServlet();
itemRequestServlet.service(request, response);
Assert.assertEquals("unexpected cookies in response", 0, response.getCookies().size());
... other asssertations ....
} catch (Exception e) {
Assert.assertFail(String.format("unexpected exception: %s", e.getMessage());
}
}
根据您关注的项目以及您需要投入多少工作,您可以充实所需的捕获部分,并可能参数化和优化构建输入处理的方式。
答案 1 :(得分:-1)