Android APP测试可修改接口访问链接,无需重装apk
2017-06-07 15:39
1176 查看
APP项目开发的时候,我都是用一个全局变量来存放接口访问链接的前缀的。一般起初开发的过程都是在局域网,这个是有就是http://192.168.0.xx这种的。如果发布版本的时候就是http://www.xx.xx,然后某些时候又要改成其他网址,这样一来老是需要重新运行app生成新的apk,那怎么做到无需重装apk就可以修改网址前缀呢?
在你手机上新建一个xml配置文件,效果如下
我们可以通过编辑工具打开xml文件,对其进行修改path的路径然后进行保存、替换。然后我们写个方法每次调用接口的时候,就获取path+/.../...进行拼接。
1、PathXmlConfig.class :是xml文件的创建,写入,读取数据的配置类
2、CommonConfig.class:调用接口是需要的公用配置类
3、使用方式:
例如现在要调用登录的接口,链接假设:http://192.168.0.100/gpa/login
这个时候我们调用方法就是getCommonURL("login");
4、适用情况:
用这种情况最好是在测试的时候,不要发布版本的时候用,所以上面多了一个CommonConfig->isOpenConfig的配置,true是指打开xml配置,默认是false。
如果测试有这么多个地址:
http://192.168.0.100/gpa/login http://127.22.0.100/gpa/login http://www.baidu.com/gpa/login
不想重新安装apk,只是想改变网址前缀,可以通过这种方式配置
在你手机上新建一个xml配置文件,效果如下
我们可以通过编辑工具打开xml文件,对其进行修改path的路径然后进行保存、替换。然后我们写个方法每次调用接口的时候,就获取path+/.../...进行拼接。
1、PathXmlConfig.class :是xml文件的创建,写入,读取数据的配置类
/** * @author SoBan * @create 2017/6/2 14:53. */ public class PathXmlConfig { private static String filePath = Environment.getExternalStorageDirectory() + "/gpinfo/"; private static String xmlName = "facerecognition.xml"; private static String PATH = "path"; private static String IMGPATH = "imgpath"; public static class PathBean { private String path; private String imgpath; public PathBean() { } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getImgpath() { return imgpath; } public void setImgpath(String imgpath) { this.imgpath = imgpath; } } /** * 生成文件夹 gpinfo */ public static void makeRootDirectory(String filePath) { File file = null; try { file = new File(filePath); if (!file.exists()) { file.mkdir(); } } catch (Exception e) { Log.i("error:", e + ""); } } /** * 生成xml */ public static File makeFilePath(String filePath, String fileName) { File file = null; makeRootDirectory(filePath); try { file = new File(filePath + fileName); } catch (Exception e) { e.printStackTrace(); } return file; } /** * xml是否存在 * @return */ public static boolean isExistsXml() { File file = makeFilePath(filePath, xmlName); if (file.exists()) { return true; } return false; } /** * 向xml写入数据 * * @param bean */ public static void createXML(PathBean bean) { try { // 获取外部存储路径,并创建文件 File file = makeFilePath(filePath, xmlName); if (file.exists()) { return; } // 创建一个文件输出流 FileOutputStream os = new FileOutputStream(file); String enter = System.getProperty("line.separator");//换行 XmlSerializer serializer = Xml.newSerializer(); // 设置输出的编码格式 serializer.setOutput(os, "UTF-8"); // 设置文档的编码格式,这个会在xml中显示出来 serializer.startDocument("UTF-8", true); // 添加 // 注释 // serializer.comment("comment, xml file test"); changeLine(serializer, enter); serializer.startTag(null, PATH); serializer.text(bean.getPath()); serializer.endTag(null, PATH); changeLine(serializer, enter); serializer.startTag(null, IMGPATH); serializer.text(bean.getImgpath()); serializer.endTag(null, IMGPATH); serializer.endDocument(); // 文档结束 serializer.flush(); os.close(); // 关闭输出流 } catch (Exception e) { e.printStackTrace(); } } /** * tag标签换行 * * @param serializer * @param enter */ public static void changeLine(XmlSerializer serializer, String enter) { try { serializer.text(enter); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * Pull方式,解析 XML */ public static PathBean pullParseXML() { File file = new File(filePath, xmlName); PathBean bean = null; // StringWriter xmlWriter = new StringWriter(); try { // // 方式一:使用Android提供的实用工具类android.util.Xml // XmlPullParser xpp = Xml.newPullParser(); // 方式二:使用工厂类XmlPullParserFactory的方式 InputStream is = new FileInputStream(file); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(is, "utf-8"); StringBuffer xmlHeader = null; // 保存xml头部 String ele = null; // Element flag int eventType = xpp.getEventType(); while (XmlPullParser.END_DOCUMENT != eventType) { switch (eventType) { case XmlPullParser.START_DOCUMENT: xmlHeader = new StringBuffer(); // 初始化xmlHeader bean = new PathBean(); break; case XmlPullParser.START_TAG: if (PATH.equals(xpp.getName())) { // eventType = xpp.next(); // xmlHeader.append(xpp.getText()); bean.setPath(xpp.nextText()); } else if (IMGPATH.equals(xpp.getName())) { // eventType = xpp.next(); // xmlHeader.append(xpp.getText()); bean.setImgpath(xpp.nextText()); } break; case XmlPullParser.TEXT: if (null != ele) { /*if("id".equals(ele)) { person.setId(Integer.parseInt(xpp.getText())); } else if("name".equals(ele)) { person.setName(xpp.getText()); } else if("blog".equals(ele)) { person.setBlog(xpp.getText()); }*/ } break; case XmlPullParser.END_TAG: /*if("person".equals(xpp.getName())){ personsList.add(person); person = null; }*/ ele = null; break; } eventType = xpp.next(); // 下一个事件类型 } // xmlWriter.append(xmlHeader); } catch (XmlPullParserException e) { // XmlPullParserFactory.newInstance e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // return xmlWriter.toString(); return bean; } }
2、CommonConfig.class:调用接口是需要的公用配置类
public class CommonConfig { //是否打开本地配置链接文件(要给别人测试并支持修改path的时候是true) public static final boolean isOpenConfig = false; public static String PATH = "http://192.168.0.100/gpa/"; public static String IMGPATH = "http://192.168.0.100/"; /** * 这里写的url指的是,访问接口链接的后缀 */ public static String getPath(boolean isIMG, String url) { if (!PathXmlConfig.isExistsXml()) { PathXmlConfig.PathBean bean = new PathXmlConfig.PathBean(); bean.setPath(API.PATH); bean.setImgpath(API.IMGPATH); PathXmlConfig.createXML(bean); } PathXmlConfig.PathBean pathBean = PathXmlConfig.pullParseXML(); if (!url.startsWith("http://") && !url.startsWith("https://") && !TextUtils.isEmpty(url)) { if (isIMG) { if (!TextUtils.isEmpty(pathBean.getImgpath())) { url = pathBean.getImgpath() + formatImageUrl(url); } else { url = IMGPATH + url; } } else { if (!TextUtils.isEmpty(pathBean.getPath())) { url = pathBean.getPath() + url; } else { url = PATH + url; } } } return url; } public static String getCommonURL(String url) { if (isOpenConfig) { return getPath(false, url); } if (!url.startsWith("http://") && !url.startsWith("https://") && !TextUtils.isEmpty(url)) { url = PATH + url; } return url; } }
3、使用方式:
例如现在要调用登录的接口,链接假设:http://192.168.0.100/gpa/login
这个时候我们调用方法就是getCommonURL("login");
4、适用情况:
用这种情况最好是在测试的时候,不要发布版本的时候用,所以上面多了一个CommonConfig->isOpenConfig的配置,true是指打开xml配置,默认是false。
如果测试有这么多个地址:
http://192.168.0.100/gpa/login http://127.22.0.100/gpa/login http://www.baidu.com/gpa/login
不想重新安装apk,只是想改变网址前缀,可以通过这种方式配置
相关文章推荐
- 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库
- android通过访问链接启动应用app(服务器加android代码)
- 修改测试apk读出的CPU主频,及主芯片型号,手机型号、品牌、内部版本号、Android版本等
- Java实现app接口和Socket消息传递(8)Android端测试接口
- Android之测试Jave接口访问硬件服务
- android app通过Geth RPC接口实现远程调用
- bug解决:android app内部请求接口返回500,但是浏览器返回200
- [转自microsoft]NET 数据访问架构指南",-数据库连接的测试.即监视链接池化
- appium学习(1)-Mac上的简单实用(测试android apk)
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- android app 压力测试工具-monkey tool
- 如何修改Android App的样式风格
- 关于SQL SERVER 2008 X64版本报错:消息 7302,级别 16,无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 的实例。
- IBM AppScan 各种测试问题修改方案
- Android 测试生命周期的APP
- 无需android环境,ant打包apk,windows和Linux环境下
- 链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误
- android app 测试case积累
- 只有被测APK时运行Robotium测试项目Logcat报错“Could not find class 'com.jayway.android.robotium.solo.Solo'"
- eclipse android 设置及修改生成apk的签名文件