基于web的微信公众号程序自动化测试-java

  • 微信公众号小程序一般基于前端APPH5,前后分离或不分离;自动化回归中基于appium不够稳定,基于web测试脚本更加稳定且效率更高;

实际中会遇到些问题,如微信授权,页面元素渲染效果差无法获取元素,接口间依赖参数不易获取等;

  1. 微信授权问题:模拟微信授权,httpclient添加请求头User-Agent模拟微信授权

            CloseableHttpClient httpclient = HttpClients.createDefault();
            String url="http://XXX";
            HttpPost httppost = new HttpPost(url);
            HashMap postHeader = new HashMap();
            postHeader.put("User-Agent","Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S5660 Build/GINGERBREAD)           AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.255");
            postHeader.put("Referer","http://wxopen.dev.choicesaas.cn/oauth2/authorize/appidXXX?scope=snsapi_userinfo");

  1. APPH5使用浏览器打开页面元素渲染效果差,部分元素无法获取,可通过浏览器开发者模式模拟手机

              打开开发者模式

                    Robot robot = new Robot();
                    robot.keyPress(KeyEvent.VK_F12);
                    robot.keyRelease(KeyEvent.VK_F12);

              模拟手机

                  Robot robots = new Robot();
                  robots.keyPress(KeyEvent.VK_CONTROL);
                  robots.keyPress(KeyEvent.VK_SHIFT);
                  robots.keyPress(KeyEvent.VK_M);   

  1. 遇到前后端不分离的程序,通过jsoup包获取js中对象属性值Document document = Jsoup.parse(result);
            Document document = Jsoup.parse(responseResult);
            /*取得script下面的JS变量*/
            Elements e = document.getElementsByTag("script").eq(11);
            Elements tag = document.getElementsByTag("script");
            Element element2 = tag.get(tag.size()-1);
            String[] data2 = element2.data().toString().split("var");

            /*循环遍历script下面的JS变量*/
            for (Element element : e) {
                
                /*取得JS变量数组*/
                String[] data = element.data().toString().split("var");
                int flag=0;
                for(String variable : data){
                    
                    /*过滤variable为空的数据*/
                    if(variable.contains("=")){
                        if(flag==0) {
                        /*取到满足条件的JS变量*/
                        if(variable.contains("serviceData") ){
                            flag=1;
                            String[]  kvp = variable.split("=");
                            //根据id截取
                            String[] split = kvp[5].split("id: '").split("outTradeNo: '");
                            String  extend=split[1];//0599d621deec4e7fb02c51e4f267cc58//outTradeNo: '
                            String  ext=split[1];//outTradeNo: '
                            outTradeNo=ext.substring(0, 26);
                            System.err.println(outTradeNo);    
                        }
                    }
     

你可能感兴趣的:(测试)