接口测试用到技术
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
` 1、使用okhttp3发送请求
2、测试框架使用的testng
3、构建和管理依赖的工具maven
以下详细介绍
一、okhttpclient3
1、使用
Request(请求):每一个HTTP请求中,都应该包含一个URL,一个GET或POST方法,以及Header和其他参数,还可以包含特定内容类型的数据流。
Responses(响应):响应则包含一个回复代码(200代表成功,404代表未找到),Header和定制可选的body。
另外可以根据response.code()获取返回的状态码。
OKHttp:简单来说,通过OkHttpClient可以发送一个http请求,并且可以读取该请求的响应,它是一个生产Call的工厂。收益于一个共享的响应缓存/线程池/复用的链接等因素,绝大多数应用使用一个OKHttpClient实例,便可满足整个应用的Http请求
先创建一个okhttpclient的实例,然后再通过client创建Call,再使用call.enqueue()方法执行异步请求或者call.execute()执行同步请求
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();//注释1
Call call = okHttpClient.newCall(new Request());//注释2
//异步
call.enqueue(new Callback() {//注释3
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
}
});
// call.execute();//同步
2、同步和异步的区别
同步和异步不一样的地方是Call对象调用的方法,call.enqueue(callback)实现函数回调成功和失败两方法,异步方法可以不用开启子线程执行。
注意:同步是阻塞式的,串联执行,同步发生在当前线程内。异步是并发式的,会再次创建子线程处理耗时操作。
3、GET请求(同步)
同步是阻塞式的,串联执行,同步发生在当前线程内。异步是并发式的,会再次创建子线程处理耗时操作。
//1.构建OkHttpClient实例
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(2, TimeUnit.SECONDS)//链接超时为2秒,单位为秒
.writeTimeout(2, TimeUnit.SECONDS)//写入超时
.readTimeout(2, TimeUnit.SECONDS)//读取超时
.build();
// 2、创建request实例
Request request = new Request.Builder()
.get()//get请求
.url("https://www.baidu.com")//请求地址
.build();//构建
// 3、通过okHttpClient 调用请求得到Call
final Call call = okHttpClient .newCall(request);
// 4、执行同步请求,获取Response对象
Response response = call.execute();
if (response.isSuccessful()) {//如果请求成功
String string = response.body().string();
Log.e(TAG, "get同步请求success==" + string);
//响应体的string()对于小文档来说十分方便高效,但是如果响应体太大(超过1M),应避免使用string()方法,
//因为它会把整个文档加载到内存中,对用超多1M的响应body,应该使用流的方式来处理。
//response.body().bytes();//字节数组类型
//response.body().byteStream();//字节流类型
//response.body().charStream();//字符流类型
printHeads(response.headers());
} else {
Log.e(TAG, "get同步请求failure==");
}
4、GET请求(异步)
//通过Builder辅助类构建Request对象,链式编程
Request request = new Request.Builder()
.url("https://www.baidu.com")
.get()
.build();
//异步
**mOkHttpClient.newCall(request).enqueue(new Callback() {**
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
e.printStackTrace();
Log.e(TAG, "get异步响应失败==" + e.toString());
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
//主线程中更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
//TODO 在主线程中更新UI的操作
}
});
Log.e(TAG, "get异步当前线程,线程id==" + Thread.currentThread().getId());
String result = response.body().string();
Log.e(TAG, "get异步响应成功==" + result);
printHeads(response.headers());
}
});
Log.e(TAG, "主线程,线程id==" + Thread.currentThread().getId());
onFailure()和onResponse()分别是在请求失败和成功时会调用的方法。
这里有个要注意的地方,onFailure()和onResponse()是在异步线程里执行的,所以如果你在Android把更新UI的操作写在这两个方法里面是会报错的,这个时候可以用runOnUiThread这个方法进行更新UI操作。
4、POST提交String请求(同步)
post提交的过程需要将提交的内容封装到一个RequestBody中,同时需要设置类型MediaType
RequestBody的数据格式都要指定Content-Type,常见的有三种:
application/x-www-form-urlencoded 数据是个普通表单;
multipart/form-data 数据里有文件;
application/json 数据是个json。
//构建RequestBody对象,post提交的过程需要将提交的内容封装到一个RequestBody中
//MediaType用于描述Http请求和响应体的内容类型,也就是Content-Type
MediaType mediaType = MediaType.parse("text/plain; charset=utf-8");
RequestBody requestBody = RequestBody.create("提交的内容", mediaType);
final Request request = new Request.Builder()
.post(requestBody)
.url("https://api.github.com/markdown/raw")
.build();
new Thread(new Runnable() {
@Override
public void run() {
try {
Response response = mOkHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
Log.e(TAG, "Post请求String同步响应success==" + response.body().string());
} else {
Log.e(TAG, "Post请求String同步响应failure==" + response.body().string());
}
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Post请求String同步响应failure==" + e.getMessage());
}
}
}).start();
5、POST提交键值对请求(异步)
请求参数提交键值对需要用到FormBody,FormBody继承自RequestBody,通过.add(“key”, “value”)形式添加:
//提交键值对需要用到FormBody,FormBody继承自RequestBody
FormBody formBody = new FormBody.Builder()
//添加键值对(通多Key-value的形式添加键值对参数)
.add("key", "value")
.build();
final Request request = new Request.Builder()
.post(formBody)
.url("url")
.build();
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
Log.e(TAG, "Post请求(键值对)异步响应failure==" + e.getMessage());
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
String result = response.body().string();
Log.e(TAG, "Post请求(键值对)异步响应Success==" + result);
}
});
6、POST提交文件请求(异步)
post提交文件,将文件传入RequestBody中即可
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), new File("text.txt"));
Request request = new Request.Builder()
.post(requestBody)
.url("https://api.github.com/markdown/raw")
.build();
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
Log.e(TAG, "Post请求(文件)异步响应failure==" + e.getMessage());
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
String result = response.body().string();
Log.e(TAG, "Post请求(文件)异步响应Success==" + result);
}
二、testng
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
三、maven
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。