从签到脚本到自动化(二)

我采用WebDriver觉得Web界面点击的方式,对于该需求并不怎么合适的。因此,再次考虑了一下,这种方案只适合自动化测试,不适合用来做功能。因此有了第二套方式。

二.模拟HTTP报文
就跟我们平时用httpwatch截取的一个个链接及参数一样,HTTP请求本质上就是报文的发送与接收。因此直接用模拟HTTP报文的方式,可以不打开浏览器,直接发送请求,避免各种页面异常情况的发生。
由于不是从页面登陆,我们就不用去考虑那些页面操作的部分,分析一下,其实整个流程只要发送两次报文就可以了:签到登陆以及发送签到信息部分。
1.登陆部分:
登陆请求时,通过看页面源码中的form或者用httpwatch截参数,我们会发现有三个参数:userId、userPwd、action,其中action中隐藏参数,在页面上是不需要修改的,但在发送请求时还是要带上的,服务端会根据这个action进行相应操作。源码如下:

01 WebConversation wc = new WebConversation();
02 WebRequest req = new PostMethodWebRequest("http://10.32.145.96:8899/wklog/login.do");
03 req.setParameter("userId", paramsLoader.getValue("userId"));
04 req.setParameter("userPwd", paramsLoader.getValue("userPwd"));
05 req.setParameter("action""login");
06
07 try {
08 WebResponse resp = wc.getResponse(req);
09 if(resp.getResponseCode() == 200 && !resp.getText().contains("用户密码错误"))
10 logger.info("...登陆成功... " + resp.getText());
11 else
12 logger.info("...网络问题...返回码:" + resp.getResponseCode() + "返回信息为:" + resp.getText());
13 catch (IOException e) {
14 logger.info(e.toString());
15 catch (SAXException e) {
16 logger.info(e.toString());
17 }

 

2.签到请求部分:

01 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
02  
03 String signAction = "http://10.32.145.96:8899/wklog/sign.do?action=createSignature";
04 req = new PostMethodWebRequest(signAction);
05 req.setParameter("remark""签到");
06 req.setParameter("beginDate", date);
07 req.setParameter("endDate", date);
08  
09 try {
10 WebResponse resp = wc.getResponse(req);
11 logger.info(Calendar.getInstance().getTime().toString() + " : " + resp.getResponseCode() + " " + resp.getResponseMessage());
12 if(resp.getText().contains("签到成功!"))
13 logger.info("...签到成功...");
14 else
15 logger.info("...签到不成功,以下为返回信息:" + resp.getText());
16 catch (Exception e) {
17 logger.info(e.toString());
18 }

 

签到部分,要注意红色部分的WebConversation对象要与登陆时的WebConversation对象保持同一样,否则无法成功,因为Session必须保持一致。
签到部分有两个参数:beginDate与endDate,实际上是没有作用的,但服务端处理时逻辑有些问题,必须要这两个参数,由于咱看不到服务端的代码,因此还是传上去得了。

通过HTTP请求的方式,我们可以避免过多的异常,成功与失败,只要看返回的报文就可以了。然而这仍然不能满足签到脚本的需求,这个脚本不可能是由人每天执行,这样是没有意义的。我们需要每天早上晚上固定某个时刻执行一下,因此我们需要一个计划任务执行工具。


http://blog.xjl.me/?p=338

你可能感兴趣的:(从签到脚本到自动化(二))