当前位置:   article > 正文

mock技术

mock技术

目录

1.moco:

Stub(桩)实现:

moco.json文件内容: 

 启动moco服务命令: 

根据规则1访问:

 根据规则2访问:

2.wiremock:

1.pom依赖

 2.stubbing

3.proxying

3.bmp:browsermob-proxy(可利用har文件自动生成测试用例)

1.embedded mode(嵌入式,适合自己开发工具使用)

        pom依赖

1.embedded模式下自动生成har文件,并生成测试用例的实现

2.proxy功能实现 透明代理

2.standalone(作为独立进程运行,自动抓包使用)

1.下载zip包

 2.解压

3.启动服务:browsermob-proxy -port 9000(此端口只是bmp服务的端口,非监听端口)

 4.执行下列命令时会生成代理服务监听的端口8081.

 5.新建har文件

 6.实际请求各接口

 7.请求操作完毕后访问:http://127.0.0.1:9000/proxy/8081/har


常用mock工具:charles,fiddler,moco,wiremock,browsermod-proxy,mitmproxy.

1.moco:

        GitHub - dreamhead/moco: Easy Setup Stub Server

Stub(桩)实现:

moco.json文件内容: 

  1. [
  2. {
  3. "response" :
  4. {
  5. "text" : "Hello, Moco"
  6. }
  7. },
  8. {
  9. "request":
  10. {
  11. "uri" : "/foo"
  12. },
  13. "response":
  14. {
  15. "text" : "chuntian_tester的测试!"
  16. }
  17. }
  18. ]

 启动moco服务命令: 

         java -jar .\moco-runner-1.2.0-standalone.jar http -p 12306 -c .\moco.json

根据规则1访问:

 根据规则2访问:

 _____________________________________________________________________________

2.wiremock:

        https://github.com/wiremock/wiremock-->Getting Started - WireMock

1.pom依赖

  1. <dependency>
  2. <groupId>com.github.tomakehurst</groupId>
  3. <artifactId>wiremock-jre8</artifactId>
  4. <version>2.31.0</version>
  5. <scope>test</scope>
  6. </dependency>

 2.stubbing

  1. package ServiceTest;
  2. import com.github.tomakehurst.wiremock.WireMockServer;
  3. import org.junit.jupiter.api.BeforeAll;
  4. import org.junit.jupiter.api.Test;
  5. import java.io.IOException;
  6. import java.nio.file.Files;
  7. import java.nio.file.Paths;
  8. import static com.github.tomakehurst.wiremock.client.WireMock.*;
  9. import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
  10. public class StubTest {
  11. private static WireMockServer wireMockServer;
  12. @BeforeAll
  13. static void beforeAll() {
  14. //beforeall中先启动wiremockserver,服务占用8089端口
  15. wireMockServer = new WireMockServer(wireMockConfig().port(8089));
  16. //启动服务
  17. wireMockServer.start();
  18. //配置端口,上面已配置,此处可省略......(此处可有可无)
  19. configureFor("localhost", 8089);
  20. }
  21. @Test
  22. void stub() throws InterruptedException {
  23. //stubFor这个API:需要一个stub服务,发送请求时如果url中匹配到包含"/user/d",则给我返回我下面特定的内容,
  24. stubFor(get(urlEqualTo("/user/d"))
  25. // .withHeader("Accept", equalTo("text/xml"))
  26. //返回特定的aResponse().
  27. .willReturn(aResponse()
  28. .withStatus(200)
  29. .withHeader("Content-Type", "text/xml")
  30. .withBody("<response>d info</response>")));
  31. //todo: use
  32. Thread.sleep(300000);
  33. }
  34. }

运行用例stub,会启动wiremock服务

浏览器访问该服务,匹配到规则时就能返回想要的内容.

 curl命令发起网络请求:也会返回response 

 可返回多个数据设置:

 服务开启后的前10s内访问返回:"mock on stub"

  服务开启后的前10s内访问返回:"exception"

3.proxying

    代码实现:

  1. //代理服务
  2. public class StubTest {
  3. private static WireMockServer wireMockServer;
  4. @BeforeAll
  5. static void beforeAll() {
  6. //beforeall中先启动wiremockserver,服务占用8089端口
  7. wireMockServer = new WireMockServer(wireMockConfig().port(8089));
  8. //启动服务
  9. wireMockServer.start();
  10. //配置端口,上面已配置,此处可省略......(此处可有可无)
  11. configureFor("localhost", 8089);
  12. }
  13. //设置代理服务,类似charles中的map_remote技术.BeforeAll中的服务启动起来后会占用8089端口,任何访问这个端口的请求都会被代理到另一个地址.
  14. @Test
  15. void proxy() throws InterruptedException {
  16. stubFor(
  17. //请求任何地址都会代理到proxiedFrom中的地址.
  18. get(urlMatching(".*"))
  19. .atPriority(10)
  20. .willReturn(aResponse().proxiedFrom("https://www.baidu.com")));
  21. Thread.sleep(100000);
  22. }
  23. }

 启动服务后访问服务所在主机的8089端口,被代理到了百度

_____________________________________________________________________________

3.bmp:browsermob-proxy(可利用har文件自动生成测试用例)

        类似python的mitmproxy.

GitHub - lightbody/browsermob-proxy: A free utility to help web developers watch and manipulate network traffic from their AJAX applications.

1.embedded mode(嵌入式,适合自己开发工具使用)

        pom依赖

  1. <dependency>
  2. <groupId>net.lightbody.bmp</groupId>
  3. <artifactId>browsermob-core</artifactId>
  4. <version>2.1.5</version>
  5. <scope>test</scope>
  6. </dependency>

1.embedded模式下自动生成har文件,并生成测试用例的实现

  1. public class mockBmpOnProxyTest {
  2. private BrowserMobProxy proxy;
  3. @BeforeAll
  4. void beforeall(){
  5. //代理服务的初始化
  6. //根据官方文档介绍引用官方代码
  7. BrowserMobProxy proxy = new BrowserMobProxyServer();
  8. //bmp 服务开启监听8083端口
  9. proxy.start(8083);
  10. }
  11. @BeforeEach
  12. void beforeeach(){
  13. //每条用例操作执行前创建har文件
  14. //与每个操作绑定.如下面的click测试
  15. proxy.newHar("click");
  16. }
  17. @AfterEach
  18. void aftereach(){
  19. //每条用例操作执行完后生成har文件中的数据
  20. proxy.endHar();
  21. }
  22. @Test
  23. void click(){
  24. //自动化测试的各个操作,对各对象的操作将记录下对接口的请求,存在har文件中.
  25. }
  26. }

2.proxy功能实现 透明代理

 1.代码实现:

  1. public class mockBmpOnProxyTest {
  2. //修改response
  3. @Test
  4. void mockOnProxy() throws InterruptedException {
  5. // //根据官方文档介绍引用官方代码
  6. BrowserMobProxy proxy = new BrowserMobProxyServer();
  7. //bmp 服务开启监听8083端口
  8. proxy.start(8083);
  9. proxy.addResponseFilter(new ResponseFilter() {
  10. @Override
  11. public void filterResponse(HttpResponse httpResponse, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) {
  12. httpMessageContents.setTextContents(httpMessageContents.getTextContents().replace("DMS后台管理系统", "DMS后管mock"));
  13. }
  14. });
  15. Thread.sleep(100000);
  16. }
  17. }

2.启动服务后指定代理访问

 3.​​​​​​电脑指定代理后访问也会相应修改

2.standalone(作为独立进程运行,自动抓包使用)

1.下载zip包

 2.解压

3.启动服务:browsermob-proxy -port 9000(此端口只是bmp服务的端口,非监听端口)

 4.执行下列命令时会生成代理服务监听的端口8081.

 5.新建har文件

[~]$ curl -X PUT -d 'initialPageRef=Foo' http://localhost:9000/proxy/8081/har

 6.实际请求各接口

 7.请求操作完毕后访问:http://127.0.0.1:9000/proxy/8081/har

或者

[~]$ curl http://localhost:9000/proxy/8081/har

 有了以上har文件就可以生成测试用例了.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/217011?site
推荐阅读
相关标签
  

闽ICP备14008679号