在本章中,我們將學(xué)習(xí)如何創(chuàng)建一個(gè)測(cè)試計(jì)劃,測(cè)試一個(gè)WebService。對(duì)于我們的測(cè)試目的,我們已經(jīng)創(chuàng)建了一個(gè)簡(jiǎn)單的 Web 服務(wù)項(xiàng)目,并將其部署在 Tomcat 服務(wù)器上本地。
要?jiǎng)?chuàng)建一個(gè) Web 服務(wù)項(xiàng)目中,我們使用了Eclipse IDE。首先編寫服務(wù)端接口 HelloWorld 包下com.bjpowernode.ws。 HelloWorld.java 的內(nèi)容如下:
package com.bjpowernode.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
//Service Endpoint Interface
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld{
@WebMethod String getHelloWorldMessage(String string);
}
這個(gè)服務(wù)有一個(gè)的方法 getHelloWorldMessage 需要字符串 參數(shù)。
下一步創(chuàng)建實(shí)現(xiàn)類 HelloWorldImpl.java 在包 com.bjpowernode.ws 下。
package com.bjpowernode.ws;
import javax.jws.WebService;
@WebService(endpointInterface="com.bjpowernode.ws.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
@Override
public String getHelloWorldMessage(String myName){
return("Hello "+myName+" to JAX WS world");
}
}
作為下一個(gè)步驟,讓本地發(fā)布此Web服務(wù)通過創(chuàng)建端點(diǎn)出版商和公開此服務(wù)的服務(wù)器上。
publish方法有兩個(gè)參數(shù):
• 端點(diǎn)URL字符串。
• 實(shí)現(xiàn)程序?qū)ο?HelloWorld 實(shí)現(xiàn)類,在這種情況下,這是作為一個(gè)Web服務(wù)公開在以上參數(shù)中提到的由URL標(biāo)識(shí)的端點(diǎn)。
HelloWorldPublisher.java 內(nèi)容如下所示:
package com.bjpowernode.endpoint;
import javax.xml.ws.Endpoint;
import com.bjpowernode.ws.HelloWorldImpl;
public class HelloWorldPublisher {
public static void main(String[] args){
Endpoint.publish("http://localhost:9000/ws/hello", new HelloWorldImpl());
}
}
接下來修改web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
</web-app>
要部署的 web 服務(wù)應(yīng)用程序,我們需要 sun-jaxws.xml 配置文件,這個(gè)文件的內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<endpoints
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint
name="HelloWorld"
implementation="com.bjpowernode.ws.HelloWorldImpl"
url-pattern="/hello"/>
</endpoints>
現(xiàn)在,所有文件都準(zhǔn)備好目錄結(jié)構(gòu)看起來會(huì)像下面的圖片:

現(xiàn)在,這個(gè)應(yīng)用程序創(chuàng)建一個(gè)WAR文件。選擇 project > right click > Export > WAR文件。hello.war 文件保存Tomcat 服務(wù)器 webapps文件夾下?,F(xiàn)在啟動(dòng)Tomcat服務(wù)器。在服務(wù)器啟動(dòng)后,你應(yīng)該能夠訪問web服務(wù)可以通過以下網(wǎng)址:
http://localhost:8080/hello/hello
現(xiàn)在,讓我們創(chuàng)建一個(gè)測(cè)試計(jì)劃,測(cè)試上面的 web服務(wù)。
通過點(diǎn)擊啟動(dòng)JMeter的窗口 /home/manisha/apache-jmeter-2.9/bin/jmeter.sh. 點(diǎn)擊測(cè)試計(jì)劃節(jié)點(diǎn)上。重命名此測(cè)試計(jì)劃節(jié)點(diǎn) WebserviceTest.

添加一個(gè)線程組,這是所有其他元素,如取樣器,控制器,監(jiān)聽的占位符。右鍵單擊我們的測(cè)試計(jì)劃 WebserviceTest(our Test Plan) > Add > Threads(Users) > Thread Group。線程組將添加根據(jù)測(cè)試計(jì)劃(WebserviceTest)的節(jié)點(diǎn)。
接下來,讓我們修改線程組的默認(rèn)屬性,以滿足我們的測(cè)試。改變以下屬性:
Name: webservice user
Number of Threads (Users): 2
Ramp-Up Period: leave the the default value of 0 seconds.
Loop Count:2

現(xiàn)在,我們已經(jīng)定義了用戶,它是時(shí)間定義,他們將要執(zhí)行的任務(wù)。我們將添加 SOAP/ XML-RPC 請(qǐng)求元素。點(diǎn)擊鼠標(biāo)右鍵得到添加菜單,然后選擇 Add > Sampler > SOAP/XML-RPC Request,選擇元素樹中的SOAP/ XML-RPC請(qǐng)求,并在下面的圖片編輯下列屬性:
這個(gè)元素中輸入下列詳細(xì)信息:
Name: SOAP/XML-RPC Request
URL: http://localhost:8080/hello/hello?wsdl
Soap/XML-RPC Data: Enter the below contents
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://ws.bjpowernode.com/">
<soapenv:Header/>
<soapenv:Body>
<web:getHelloWorldMessage>
<arg0>Manisha</arg0>
</web:getHelloWorldMessage>
</soapenv:Body>
</soapenv:Envelope>

需要添加到測(cè)試計(jì)劃中的最后一個(gè)元素是一個(gè)監(jiān)聽器。此元素是負(fù)責(zé)所有的 HTTP 請(qǐng)求的結(jié)果存儲(chǔ)在一個(gè)文件中,并呈現(xiàn)出可視化的數(shù)據(jù)模型。
選擇 webservice 用戶元素,并添加一個(gè)查看結(jié)果樹監(jiān)聽器(Add > Listener > View Results Tree).

現(xiàn)在保存的以上測(cè)試計(jì)劃 test_webservice.jmx。執(zhí)行本測(cè)試計(jì)劃使用 Run > Start 選項(xiàng)。
下面的輸出,可以看到在監(jiān)聽器中。



可以看到在過去的圖像響應(yīng)消息 "Hello Manisha to JAX WS world".