总结测试框架-接口测试

接口测试用到技术



前言

提示:这里可以添加本文要记录的大概内容:
` 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提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值