Hook OKhttp3模拟服务端响应请求返回mock数据
Posted gengqiquan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hook OKhttp3模拟服务端响应请求返回mock数据相关的知识,希望对你有一定的参考价值。
尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/78119791, 本文出自:【gengqiquan的博客】
许多流程规范化的公司进行版本开发的时候,一般都是先出需求,然后给接口文档和设计图,移动端和服务端同步开始开发。这种情况移动端的被动性就比较大,调试的时候极度依赖测试服务器的接口发布,或者自己写一堆模拟的响应代码来替换实际请求流程。很烦,导致大部分人不愿意这样做而采取坐等接口发布的方式。
这里提供一个hook 流行网络请求库OKhttp3的一种模拟服务端响应请求返回数据的库,方便只有文档而没有发布测试服务器的时候进行开发和调试
开始使用
- 创建一个类,然后定义一些注解了@MOCK(“需要被模拟的请求地址”)的方法
方法返回你需求要模拟的数据
pu
blic class MockService
@MOCK("github_user_info")
public MockResult auction(Request request)
Map<String, String> query = MockRequest.getQuery(request);
String name = query.get("name");
return MockResult.create(request, "\\n" +
" \\"status\\": true,\\n" +
" \\"msg\\": \\"操作成功\\",\\n" +
" \\"data\\": \\n" +
" \\"bond\\": \\"100000\\",\\n" +
" \\"auction_plats\\": [\\n" +
" \\n" +
" \\"id\\": \\"1\\",\\n" +
" \\"name\\": \\"汽车街\\",\\n" +
" \\"rule_url\\": \\"http://www.rule.com\\"\\n" +
" \\n" +
" ]\\n" +
" \\n" +
"");
- @MOCK的注解值:github_user_info 对应你需要模拟的方法的接口路径
public interface GithubService
@GET("github_user_info")
public Observable<String> getUser();
- 只在DEBUG情况下添加 MockInterceptor,防止忘记移除方法影响生产环境
OkHttpClient client = new OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.connectTimeout(3, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
if (BuildConfig.DEBUG) //printf logs while debug
client = client.newBuilder()
.addInterceptor(new MockInterceptor(Parrot.create(MockService.class)))
.build();
- 获取你模拟的数据结果
new Retrofit.Builder()
.baseUrl("http://www.github.api.com")
.client(client)
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build().create(GithubService.class)
.getUser()
.observeOn(Schedulers.io())
.subscribeOn(androidSchedulers.mainThread())
.subscribe(new Subscriber<String>()
@Override
public void onCompleted()
@Override
public void onError(Throwable e)
text.setText(e.toString());
@Override
public void onNext(String json)
// the json is your mock result
text.setText(json);
);
gradle
compile 'com.gengqiquan:parrot:0.0.1'
maven
<dependency>
<groupId>com.gengqiquan</groupId>
<artifactId>parrot</artifactId>
<version>0.0.1</version>
<type>pom</type>
</dependency>
以上是关于Hook OKhttp3模拟服务端响应请求返回mock数据的主要内容,如果未能解决你的问题,请参考以下文章
Okhttp3、http2多路复用POST请求高峰负载时响应时间长