java移动端接口测试_使用java如何进行接口测试

关于接口测试, 我们之前介绍过很多方法了, 有postman, soapUI, Jmeter等, 他们各有优势和劣势, 今天和大家分享的是如何用java TestNG来实现接口测试.

开始测试之前需要如下准备工作:

1. IDE环境, Intellij 或者eclipse, 个人推荐使用Intellij.

2. JKD1.8 以上

3. Maven 环境 Maven环境配置

4. 被测接口(京东web版登录API)

首先来看下jd 登录接口,chrome浏览器打开www.jd.com, 使用chrome开发者工具, Windows用户按键盘F12, 将tab切换到Network, 使用密码登录方式, 登录成功后, 我们就可以获取到登录接口了,如果无法获取,使用charles第三方工具也是妥妥的.

看下我登录后开发者工具:

接着在ide中创建项目, 我们选择maven来创建项目

是不是非常的简单, 一步步都是next下去即可, Intellij就会帮你把maven项目创建好. 

如果你的IDE里没有maven,也不用着急, 在菜单的Preference->plugs里可以添加所需插件

在创建好的项目中, 我们首先进入pom.xml文件, 这是maven的配置文件

4.0.0

com.api.test

test

1.0-SNAPSHOT

这边需要添加相应的项目管理依赖包, 如testng等, 适个人情况添加所需的依赖包.

UTF-8

execShell

org.testng

testng

7.0.0

org.apache.poi

poi

3.10-FINAL

org.jsoup

jsoup

1.9.1

org.apache.httpcomponents

httpclient

4.5.2

org.apache.httpcomponents

httpmime

4.5.2

com.jcraft

jsch

0.1.54

mysql

mysql-connector-java

5.1.38

commons-beanutils

commons-beanutils

1.6

commons-collections

commons-collections

3.1

commons-logging

commons-logging

1.1

net.sf.ezmorph

ezmorph

1.0.6

net.sf.json-lib

json-lib

2.4

如果需要maven来帮你build项目也是可以的, 方法也是非常简单

org.apache.maven.plugins

maven-compiler-plugin

8

8

org.apache.maven.plugins

maven-surefire-plugin

2.19.1

1

1

true

once

-Dfile.encoding=UTF-8

${groupsTest}

**/*Test.java

测试思路:

以下示例中参数都来自于chrome开发者工具中捕获的信息, 因为被测接口是post方法,且在接口中声明了提交方式:

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

所以在接口测试过程中, form data里的信息都要作为参数添加.

完成以上内容就可以开始创建一个测试的java类, 在你的项目的/test/java下面创建 NewApiTest.java

importorg.apache.http.HttpEntity;importorg.apache.http.NameValuePair;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;importorg.testng.annotations.Test;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;/** @auth:louiezhou

* @return: 测试数据

* @parame:

**/

public classNewApiTest {

CloseableHttpResponse response=null;

String entityStr= null;//登录url

String url ="https://passport.jd.com/uc/loginService?uuid=a25f6873-4dd9-4334-ad4c-b8e3f&ReturnUrl=https%3A%2F%2Fwww.jd.com%2F&r=0.8097302259069017&version=2015";

@Test(invocationCount= 1, threadPoolSize = 0)public void JdLoginTest() throwsIOException {//获取连接客户端工具

CloseableHttpClient httpClient=HttpClients.createDefault();//创建POST请求对象

HttpPost httpPost=newHttpPost(url);//httpPost.addHeader post请求 header

httpPost.addHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");

httpPost.addHeader("User-Agent:","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36");//List headerList= Lists.newArrayList();//headerList.add(new BasicHeader(HttpHeaders.CONTENT_TYPE,"application/x-www-form-urlencoded; charset=UTF-8"));//headerList.add(new BasicHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"));//参数封装对象

List params=new ArrayList();try{

params.add(new BasicNameValuePair("uuid","a25f6873-4dd9-4334-ad4c-e6f8992b8e3f"));

params.add(new BasicNameValuePair("eid","BHM2GM3F6FVMTA3YNGT4JRDJBHAWFK7MSHDPF3SU4FHFSOLMBUP77TDQE5EB43BZPDT5J6PAQ6CFI"));

params.add(new BasicNameValuePair("fp","f0aef80fec848c0a78c823bd234"));

params.add(new BasicNameValuePair("loginType","c"));

params.add(new BasicNameValuePair("loginname","zhangsan"));

params.add(new BasicNameValuePair("nloginpwd","Y2nHBYQrhMS1/YvBs+cW8rrvbW1CYlmX61xfoLx7tgSpbgxZ8+/HCgefeAXphJVmefDdN/3d3UQLnFiyl7GSkGjZQNU4pw+9+202NovcR6q9G/haGpNKp/5h+Xs+J7BrUfKXvkmdmKS0fIs7ly0K+OY/BHKcYg="));

params.add(new BasicNameValuePair("authcode","107fdb562e32406cab356c3ff97"));

params.add(new BasicNameValuePair("pubKey","MIGfMA0GCSqGSIb3DQEgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21TAIfT/vexbobzH7Q8SUdP5uDPXEBKzOjx2L28y7Xs1d9v3tdPfKI2LR7PAzWBmDMn8riHrDDNpUpJnlAGUqJG9ooPn8j7YNpcxCa1iybOlc2kEhmJn5uwoanQq+CA6agNkqly2H4j6wIDAQAB"));

params.add(new BasicNameValuePair("sa_token", "B68C442BEF615E156C81EFA53D580517BB9357FB9516A01E25761124AE9AF7B3CFA3C38D38484A734CB58C286401C2DEC2A5DFF3C9E856280AF80D4851C9B0239587771E8DC06B46454644D4908F4DC165CB70D86EAC7276BFBE489FFE2324EDDC5F71043BFB99B3D6E238B1AE9E67C3F297E0993B8497B1287640777CF4FFBA52FF032510AD19D7F371541C798742CB4378E5DD2119BADE9078310468AF8436A2B88593A92EEAF16FCFD55CD7F121B58D7A9A833D74068FACC5A6D6D8C3D1A850245F0742DEEC12BACF0FF9D5853FFDF1B37AC6A5E676DC635896AFD884D0BBB8A490E57234DF65A76AF189908F4AB80AEA36E56F6DD110EF7D36D119BB77F0B65774780348FFE859A68D2E0B3A3CDDAFD1BEFCD401530D536C8EF68B618969FC2FFD658FE0BA7BC2E7250F9CCDBB8F9AF360FC293F294A7279EA70043E860784C2E2CF11181C44561794A32AADDB2AC37B1294C08E7B63C85E6561F138195ECCF28EA0F08FB5A16DB7A20814DD914FC0C8A12BF29FFC4F73DD39361EBA1A849BB25B9F5957589347E205573754EA468D809CCCA698BFAB16373516DC8F5FEE8A24C2306850D601D6827C161F1A83057E0F93A97A0C034E"));

params.add(new BasicNameValuePair("seqSid","31251240"));

params.add(new BasicNameValuePair("useSlideAuthCode","1"));

params.add(new BasicNameValuePair("_t","_t"));//使用URL实体转换工具

UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(params, "UTF-8");

httpPost.setEntity(entityParam);//执行请求

response=httpClient.execute(httpPost);//获得响应的实体对象

HttpEntity entity=response.getEntity();//使用Apache提供的工具类进行转换成字符串

int code =response.getStatusLine().getStatusCode();

System.out.println("StatusCode: " +code);

Assert.assertEquals(200,code);

entityStr=EntityUtils.toString(entity,"UTF-8");

System.out.println("接口返回结果是:="+entityStr);

}catch(Exception e){

e.printStackTrace();

}finally{//释放资源

if(httpClient!=null) {

httpClient.close();

}if (response!=null){

response.close();

}

}

}

}

声明:

1.示例使用testng, 因此必须在方法上添加@Test符号,便于被识别到是测试代码块

2.使用了java的httpclient, 它是一个客户端的http通讯实现库.

HttpClient的目标是发送和接收HTTP 报文,不缓存内容, 重新格式化请求/重定向URI,或者其它和 HTTP 运输无关的功能。

3.使用了List 的实现类ArrayList来封装对象, ArrayList的优点是查询速度比较快.

右键java文件, 选择run 即可执行, 让我们来看下执行结果:

思考:

这样一个接口测试就实现了, 但作为一名严格要求自我的资深测试工程师来说, 这样的设计合理吗? 是否满足数据和测试业务分离, 断言是否充足, 代码是否可以重用, 怎么去管理N多个测试用例, 怎么降低代码耦合度, 怎么进行多线程测试, 测试报告如何展示,如何自动构建, 诸多问题等待解决.

请持续关注我, 和你分享更多精彩内容.

Story:

人要有一个奋斗目标,这样活起来才有精神,有奔头。整天无所事事、无聊至极的,就是因为没有目标。从小就要为自己的人生制定一个目标,然后不断地向它靠近,终有一天你会达到这个目标。如果从小就糊里糊涂,对自己的人生不负责任,没有目标没有方向,那这一生也难有作为。每个人出门,都会有自己的目的地,如果不知道自己要去哪里,漫无目的地闲逛,那速度就会很慢;但当你清楚你自己要去的地方,你的步履就会情不自禁地加快。如果你分辨不清自己所在的方位,你会茫然若失;一旦你弄清了自己要去的方向,你会精神抖擞。这就是目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5折叠卡片,基于HTML5折叠卡片式下拉菜单代码

基于HTML5折叠卡片式下拉菜单代码。这是一款基于jQueryCSS3HTML5实现的下拉列表框特效代码。效果图如下:实现的代码。hmtl代码:爱编程爱编程 jQuery特效 CSS3特效 HTML5特效 音效下载 flash动画js代码:(function ($) {var cards $(.card-dro…

fastexcel读取excel追加写入sheet页_python笔记52:python操作excel

主要内容:小目标:掌握excel模块主要内容:excel相关模块,openpyxl安装使用如果看完这篇文章,你还是弄不明excel相关操作; 你来找我,我保证不打你,我给你发100的大红包。1. excel相关操…

HTML音乐播放没声音,网页没有声音但系统显示有声音怎么回事?如何解决?

网友提问:为什么网页没有声音,除了迅雷高清在线影院的视频有声音和本已经下载的歌或视频有声音外,其他网页都没有声音!就是网页没声音,其他一切正常!网页没有声音但系统显示有声音;网页在线视频…

html层次选择器例题,详解强大的jQuery选择器之基本选择器、层次选择器

jQuery允许开发者使用从CSS1到CSS3几乎所有的选择器,以及jQuery独创的高级而复杂的选择器。另外还可以加入插件使其支持XPath选择器,甚至开发者可以编写属于自己的选择器(即选择器插件,参考上篇:jQuery插件原来如此简单——jQuery…

cesium 经纬度绘制点_炫酷大屏地图自定义绘制(一)

现在数据中台的概念炒的火热,那在收集到数据后就要想办法去设计大屏,可视化展现。往往大屏都会涉及到地理位置的显示。对于常见的省市区,网上都已经提供了地理json数据,那对于需要定制化的我们要怎么处理呢?首先我们还…

关于python语言和人工智能下哪个说法不正确_“在资源管理器”窗口中,文件夹图标左侧有“...

【单选题】表示串行数据传输速率的指标为:___。【单选题】串行口工作在方式0时,其波特率:___。【简答题】发布混合碱含量的测定三个锥形瓶的滴定终点颜色【简答题】将自己做的三个锥形瓶的滴定终点颜色拍照发上来(三个瓶子并排摆在白色托盘中)【单选题】Guido van Rossum正式对…

html瞄点四大名著有图片,四大名著手抄报图片图和文字资料

四大名著之【三国演义】罗贯中(1330年一1400年之间),名本,号湖海散人,明代通俗小说家。他的籍贯一说是太原(今山西),一说是钱塘(今浙江杭州),不可确考。据传说,罗贯中曾充任过元末农民起义军张士诚的幕客&a…

shell181网格划分_ANSYS软件中SHELL181单元参数详解(1)

SHELL181单元说明SHELL181单元适合对薄的到具有一定厚度的壳体结构进行分析。它是一个4结点单元,每个结点具有6个自由度:x,y,z方向的位移自由度和绕X,Y,Z轴的转动自由度。(如果应用了薄膜选项的话,那该单元则只有移动自由度了)。简并三角形选…

怎样查询2021高考模拟成绩,2021年高三一模二模三模哪个成绩更接近高考成绩,看看网友是怎么评论...

2021年高三一模二模三模哪个成绩更接近高考成绩虽然大多数人认为一模的成绩最接近高考,基本定型了,但高考变幻莫测,成绩很有可能发生变化,成绩升降都是很难说的。高三一模之后成绩也没有定型,还有最后逆转的机会。高考…

lisp 标记形心_标记-整理算法

定义该算法分为标记和整理两个阶段,标记阶段会遍历并标记活动对象,整理阶段通过数次搜索堆来重新装填活动对象,它们聚集到了堆的一端。lisp2算法forwarding指针表示活动对象的目标地址过程概要初始状态标记结束后整理结束后整理阶段伪代码com…

js遍历json数组给html td赋值,JS实现给json数组动态赋值的方法示例

关注微信公众号JS实现给json数组动态赋值的方法示例转载 更新时间:2017年07月04日 10:19:00 作者:小魏的马仔这篇文章主要介绍了JS实现给json数组动态赋值的方法,结合实例形式分析了javascript针对json数组的遍历、赋值等常用操作技巧,需要的朋友可以…

甘肃民族师范学院计算机科学系,甘肃民族师范学院计算机科学与技术专业2016年在甘肃理科高考录取最低分数线...

类似问题答案衡阳师范学院计算机科学与技术专业2016年在甘肃理科高考录取最低分数线学校 地 区 专业 年份 批次 类型 分数 衡阳师范学院 甘肃 计算机科学与技术 2016 二批 理科 448 学校 地 区 专业 年份 批次 类型 分数 衡阳师范学院 甘肃 计算机科学与技术 2016 二批 理科 44…

python面试题百度云下载_分享三道Python经典面试题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼验证邮箱格式验证邮箱的格式,不同语言的实现大同小异,通过正则表达式是最快捷的匹配方式,但对于不熟悉正则的同学看着一长串匹配符还是比较头痛的,其实也没那么恐怖。熟悉python 中正…

计算机科学与技术专业实习招聘,中科院研究生院招聘GIS或计算机专业实习生

中科院研究生院招聘GIS或计算机专业实习生由于项目需要,中科院研究生院特招聘GIS或计算机方向实习生,具体要求如下:项目名称:油气田WebGIS系统招聘人数:1人(目前已有1人)主要工作是根据油气田生产需要,实现WebGIS支持下…

r语言regexpr函数_R语言学习笔记-文本挖掘之字符处理(1)

在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台,虽然文本的处理并不是它的强项, 但是R语言还是包含大量的字符串操作工具,本章着重整理了部分常用字符处理函…

html div如何列对其,CSS:自适应N列布局如何解决两端对齐

关于每行N列的这种布局,存在一个两端对齐的问题,因为每一列都会存在一个margin-left或者margin-right,导致最后一个超出父元素的边界。通过一番努力,终于解决了这个遗留很久的问题,废话不多说,先看做完之后…

v380智能快配连接不上怎么办_Win7系统电脑设置连接远程桌面的操作方法

Win7系统电脑远程桌面无法连接怎么办?Win7怎么设置连接远程桌面?请看下文具体操作步骤。一般情况下,对Win7的远程连接只需要5步即可完成远程连接的设置:1)查询并记录远程计算机的IP,开始——运行——输入cmd&#xff0…

计算机专业买win,新买的电脑是win10系统,有的人却费尽心思重装成win7,为什么呢...

简单地说,现在的新电脑几乎都是最新的windows系统,而厂商通常预装的是windows10家庭版,虽说没有多强的功能,但也能够满足我们日常使用的需求。重要的是预装的win10系统是正版的!但不难发现,即便是正版的win…

wireshark网卡权限_网络分析系列之六_Wireshark安装

Wireshark对常见操作系统都支持安装,包括Windows系统、Mac OS X以及基于Linux的系统。你可以在Wireshark的官方网站上,查找所有 Wireshark支持安装的操作系统列表,以及系统版本和硬件要求信息。Wireshark安装系统支持和要求截止Wireshark版本…

c# 替换html注释,C# 替换div标签

C# 替换div标签0fillm2013.11.06浏览24次分享举报estyle"BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; WIDTH: 300px; HEIGHT: 200px; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid"iddivMediaPlayer>codebase,http://download.ma…