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

来源:互联网 发布:淘宝客改版 编辑:程序博客网 时间:2024/05/01 20:25

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

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

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

 

2.签到请求部分:

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

 

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

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


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

原创粉丝点击