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

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

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

01 WebConversation wc =newWebConversation();
02 WebRequest req =newPostMethodWebRequest("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 =newSimpleDateFormat("yyyy-MM-dd").format(newDate());
02
04 req =newPostMethodWebRequest(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值