当前位置: 首页 > news >正文

如何做网站搜索功能合肥优化

如何做网站搜索功能,合肥优化,WordPress为什么卡,p2p网站开发思路方案接口测试实践的记录在敏捷开发交付的流程中#xff0c;自动化测试实际上被放在一个看起来挺重要的位置#xff0c;而自动化测试中#xff0c;接口测试是一个投入产出比比较高的一种自动化测试的形式#xff0c;而我自己也做了一个这样的脚手架一样的东西可以方便进行自动化…接口测试实践的记录在敏捷开发交付的流程中自动化测试实际上被放在一个看起来挺重要的位置而自动化测试中接口测试是一个投入产出比比较高的一种自动化测试的形式而我自己也做了一个这样的脚手架一样的东西可以方便进行自动化测试关键是在一些现有第三包的基础上做实现其实一个脚手架不需要几个 JAVA 类就可以完成了至少我自己的这个在 10 个文件以内.要论行数估计也没有多少代码量主要时间其实都是在想怎么更方便的写自动化测试怎么使用以后的开源代码了。下面介绍一下我自己如何完成这个自动化接口测试脚手架设计和实现的以及我自己实现过程中的种种发现。主要从以下几个方面来讲如何构建接口自动化测试的脚手架关于接口测试参考的一些资源关于接口测试的后续的一些想法如何构建接口自动化测试的脚手架接口测试本文中主要是指 HTTP 的请求构建接口自动化测试脚手架的时候首先先看看平常接口测试测试人员时如何做的我了解主要是以下几种方式通过操作页面/APP 来触发接口调用使用诸如 SOAPYUI/JMETER/POSTMAN 或者其他的客户端工具来进行接口测试我自己都使用过 SOAPUI/JMETER/POSTMAN,不能说使用的多么深入但是常用的功能也都有用过比如 SOAPUI 构建一个项目完整的接口自动化测试用例大概有 200 以上的用例可以支持不同的测试环境检查点中可以检查数据库,使用 XPATH/XQUERY 来检查获取指定的值进行不同 API 的数据传递等等这些工具 (指功能测试方面) 大体的逻辑我觉得是类似的,基本上都有:发起请求的客户端,需要测试人员构建也有通过 WSDL/WADL 自己生成的不过数据都是需要测试人员输入的根据表达式进行取值的 Resolver,就是可以根据 XPATH/XQUERY 语法或者其他的语法来获取指定的值就是用来传递上下文数据的一种方式外部可以参数话数据比如环境配置可以查看测试结果这个其实可以理解为某种测试框架的一个功能比如 JUNITTESTNG接口自动化测试脚手架的构建根据以上的分析如果自己需要实现的话最主要需要实现一下其实就是请求的构建请求构建包括了:发起请求的客户端请求数据的构建对于发起请求的客户端就直接使用了 Spring RestTemplate,考虑的主要原因如下:使用相对比较方便,模块化比较清晰可以使用 HTTPClient 的实现Spring RestTemplate 所在的包还有其他一些接口的支持以后如果使用其他接口可以不需要换包也可以做在实际的使用过程中其实也遇到了一些问题比如如下的内容:HTTPS 的访问开发接口定义不够准确的问题,造成使用 RestTemplate 时候出现了一些不在开始预期范中的问题如何解决这些问题,在后面再详细介绍这里说明一下使用 RestTemplate 的一个主要流程1. 构建请求设置请求的 HeaderURLAcceptContextTypeToken 等等2. 调用请求获取返回的 Response这个 ResponseRestTemplate 中实际上封装了一个 ResponseEntity 的类里面包括了请求状态Body 之类RestTemplate 有个好处就是如果给 RestTemplate 设定了 MessageConverter 的话他可以自动把请求的返回类型直接转换比如你发起请求的时候设置了 JOSN 的 Message Converter他可以帮你把类或者字符串自己转化为 JSON 来发送同样如果是返回值是 JSON 的话也可以帮你自己将 JSON 转换成你指定类型的 JAVA BEAN说完这个流程我们就说说如何通过 RestTemplate 构建一个简单的 HTTP 请求:Map urlVariable new Map ();urlVariable.put(q,test);JavaBean javaBean restTemplate.getForObject(http://www.baidu.com,JavaBean.class,urlVariable);JavaBean javaBean1 restTemplate.postForObject(http://www.baidu.com,JavaBean.class,urlVariable);ResponseEntity e restTemplate.getForEntity(http://www.baidu.com,JavaBean.class,urlVariable);实际上使用 RestTemplate 还是挺简单的不过为了让使测试更为方便一点然后每个人的代码更统一点自己重新封装了一下 RestTemplate 的使用主要分为三个概念:Service 的描述测试数据客户端调用接口服务描述Service 的描述实际上就是一个 JSON 文件只不过自己规定了一下格式类似于,这个文件描述了 API 的定义当然 API 的 body 没有在这个里面不过为了不把事情搞复杂就暂时不放在这个里面.{apiDomainName: applicationName,contentType: application/x-www-form-urlencoded,headers: {Accept: application/json, text/javascript, */*},method: POST,pathParameters: [],queryParameters: [username,],resourceURL: /application/subdomain}测试数据类private Map queryParameters Maps.newHashMap();private Map pathParameters Maps.newHashMap();private Map headers Maps.newHashMap();private T body;而如何调用客户端就变成,而且其实每一个 API 的访问其实都可以这样子来做ResponseEntity response RestTemplateHelper.build(serviceDescriptionPath,requestData).call();说明一下的是serviceDescriptionPath 就是接口的描述requestData 就是需要进行测试的数据然后实际上接口的描述是开发还没有开发好的时候就已经定了的所以这里的变量就变成如何构建 requestData 了构建 RequestData构建 requestData 实际上就是设计测试用例那么这里也是使用 Excel 的方式将不同的值填写到 excel 里面不过为了减少 set 值这样的操作这个脚手架就提供了一些工具可以直接将数据设置到 RequestData 实例具体的操作如下:Excel 是如下格式的变量名测试用例 1测试用例 2data.queryParameters(username)11data.queryParameters(year)20152014data.queryParameters(month)1011说明一下通过反射的方式可以直接生成一个 requestData 的实例,同时 queryParameters 中值已经设置好了这样调用代码中就不需要写类似于RequestData data new RequestData();data.queryParameters.put(username,1);data.queryParameters.put(year,2015);这里有兴趣的同学可以参考这个包:里面其实已经有很方便的通过反射去赋值了,org.joddjodd-bean3.6.6使用 TestNG 的 DataProvider刚才讲述了如何发生生成数据那么通过 Excel 的方式提供不同的数据就可以通过 TestNG 的 DataProvider 了所以测试数据通过TestNG data provider 的实现在这里就不多少了网上其实有很多内容了.接口测试的代码看起来就是这个样子了 DataProvider(name data)public Iterator getAPITestData(Method m) throws Exception {Map clazz new HashMap();clazz.put(RequestData, RequestData.class);Iterator y TestData.provider(testcase/api1.xls, m, clazzMap);return y;}Test(dataProvider data)public void testAPITest(RequestData data) {ResponseEntity response RestTemplateHelper.build(serviceDescriptionPath,requestData).call();Assert.assertEqual(response.getStatus,200); // response 的期望值实际可以通过dataprovider传入}而且几乎所有的代码都差不多成这个样子了那么获取可以写个代码生成的东西,当然最后通过了 JsonPath 写了一些获取 JSON 值的工具这个暂时也就不说了.那么代码生成吧当封装好这些东西之后发现所有的接口都类似了然后就做了代码生成的工具了,代码生成器的入口实际上个就是那个服务描述文件开始的所以代码生成器的参数就是服务描述文件在实际的使用的过程中接口描述这个文件也可以自动生成目前总共支持以下几种:手动编写描述文件抓取开发 API 规格网站接口的描述自动生成描述文件解析 HAR 文件自动生成描述文件解析 HAR 其实不难就是繁琐一点字段有点多后续想打通和 POSTMAN 的连接可以接收 POSTMAN 的导出文件然后也可以导出 POSTMANT 的以后开 BUG 就什么也不说直接放一个 POSTMAN 文件其实也挺帅的至此一个接口测试的脚手架就大致完成了.总结起来就是:封装了 RestTemplate让他接受一个接口的描述文件一个请求的数据通过 Excel 传数据给请求的数据进行数据驱动相同类似的代码进行代码生成最后其实这样子使用下来,接口构建几个简单一点的自动化测试用例其实也就是几分钟的事情.一些细节在实现过程中实际上还有一些特殊情况比如说需要 token认证信息这些通过一个公用函数的方式就可以解决然后在代码生成的时候直接讲这个放在实际测试的接口前面调用. 后有就是上面说到的的:HTTPS 的访问开发接口定义不够准确的问题,造成使用 RestTemplate 时候出现了一些不在开始预期范中的问题HTTPS 的访问是通过如下代码解决的,创建一个略 SSL 的 httpclient 就可以了public static RestTemplateClientHelper getHttpClientImplInstance(){RestTemplateClientHelper client new RestTemplateClientHelper();HttpClient httpClient getIgnoreSSLHttpClient();client.setTemplate(new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient)));return client;}/*** 获取忽略SSL的httpclient支持https的请求* return*/private static HttpClient getIgnoreSSLHttpClient() {CloseableHttpClient httpClient null;try {httpClient HttpClients.custom().setHostnameVerifier(new AllowAllHostnameVerifier()).setSslcontext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {return true;}}).build()).build();} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {logger.error(e);}return httpClient;}还有一个就是有时开发的接口返回类型 (accept type) 不能让 RestTemplate 处理那么其实添加自己定义个 MessageConverter 就好了:下面是一个修改阿里自己的 FastJSON 的 MessageConverter 的例子,其实也没改什么就是捕捉了一个异常主要是不知道什么原因调用时候 readInternal 就抛出和编码格式有关系的异常然后就捕捉了一下异常反正也就把那个问题就没有了不过这个改法应该也是有问题的.public class ModifiedFastJsonHttpMessageConverter extends AbstractHttpMessageConverter {........public ModifiedFastJsonHttpMessageConverter() {super(new MediaType(application, json, UTF8), new MediaType(application, *json, UTF8));this.charset UTF8;this.features new SerializerFeature[0];}............protected Object readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {ByteArrayOutputStream baos new ByteArrayOutputStream();InputStream in inputMessage.getBody();byte[] buf new byte[1024];while(true) {int bytes in.read(buf);if(bytes -1) {byte[] bytes1 baos.toByteArray();try {return JSON.parseObject(bytes1, 0, bytes1.length, this.charset.newDecoder(), clazz);}catch (Exception e){return baos.toString(UTF-8);}}if(bytes 0) {baos.write(buf, 0, bytes);}}}........}后续的一些想法后续希望在这个基础上再做点其他的一些事情:增加 POSTMAN 的代码生成的支持探索能不能通过 API 接口描述直接生成 JMETER 的 JMX 文件可以讲基础的 JMETER 性能测试的基础代码也生成好整理一下放到 GITHUB 上面其实整个脚手架自己也就是几个文件而已:)建立一个 MOCK SERVER方便模拟一些 API 调用的方式做一个简单点获取 JSON 中指定字段然后传递给下一个 API 使用的工具一些资源
http://www.zqtcl.cn/news/152301/

相关文章:

  • 网站如何做淘宝支付个人注册商标步骤
  • 书香校园网站建设网站排名下降了怎么办
  • 观音桥网站建设湖南省建设银行网站官网
  • 信阳网站建设找汉狮搭建网站知识
  • 企业门户网站用户类型商务信息网
  • 深圳网站设计廊坊公司深圳ui设计培训班
  • 为什么网站需要维护帮人推广注册app的平台
  • 网站开发岗位要求服务好的做培训网站
  • 宁波制作网站企业有哪些学网页设计需要什么学历
  • 网站建设公司墨子网络百度域名续费
  • 琪觅公司网站开发中文网页开发工具
  • 教育网站制作设计成都网络营销公司
  • 怎么查看一个网站页面的seo优化情况网站建站建设首选上海黔文信息科技有限公司2
  • 威海网站建设价格深圳优美网络科技有限公司
  • 做网站用什么系统建设网站投资多少
  • 凡科建站官网 网络服务抚顺 网站建设
  • 学校网站的建设方案西安企业seo外包服务公司
  • 建设租车网站深圳ww
  • 推广网络网站潜江资讯网一手机版
  • 凡科网站自己如何做毕设 做网站
  • 一起做网站逛市场百度权重查询网站
  • 专业网站优化推广网站核查怎么抽查
  • 牡丹江站salong wordpress
  • 网站建设公司做网站要多少费用有哪些外国网站国内可以登录的
  • 天津建站平台网页制作免费的素材网站
  • 建设网站需要专业哪个企业提供电子商务网站建设外包
  • 公司网站建设及维护网站建设思维
  • 那个网站可以学做西餐17做网站广州沙河
  • 品牌网站建设哪里好京东网站建设案例
  • 亚马逊海外版网站深圳市工商注册信息查询网站