python写接口测试java可以吗_一步一步开发一个Dubbo框架的小Demo并用Java和Python调用Dubbo接口...

“这是一个基于spring+dubbo开发的小demo。主要用于学习基于spring+dubbo框架的开发流程。用将此项目作为学习使用python进行dubbo接口测试的服务端程序。”

构建测试知识体系,欢迎关注

1. 创建Dubbo项目

1.1 使用Maven创建多模块项目

因为这是一个demo项目,我希望将dubbo provider和comsumer都放到一个工程中方便管理。所以我这里创建了一个Maven多模块工程。操作步骤如下:

打开IntelliJ IDEA——>

File——>New——>Project——>

Maven——>

不要勾选Create from archetype——>Next——>

输入groupId(chunming.liu)和artifactId(dubbo-demo)——>Next——>

设置项目名称dubbodemo——>Finished

这样我们就创建好了一个普通项目,因为该项目是作为一个Parent project存在的,可以直接删除src文件夹。

1.2 创建dubbo-api子项目

dubbo-api用来存放公共接口,在dubbo-provider和dubbo-consumer上都会用到。

在dubbodemo项目上,点击右键,创建一个Model(该模块即为子项目),不要勾选Create from archetype——>Next,输入artifactId(dubbo-api)——>Next——>Finished。

在dubbo-api子项目中创建package(chunming.liu.dubbo.api),其中创建interface类IDubboService:

public interface IDubboService {public Map getPermissins(String id, int count);}

1.3 创建dubbo-provider子项目

参考1.2小节,创建dubbo-provider子项目。

在项目中创建pacakge(chunming.liu.dubbo.provider),在其中创建DubboServiceImpl类,实现1.2中的公共接口IDubboService。代码如下:

public class DubboServiceImpl implements IDubboService{public Map getPermissins(String id, int count) {List demo = new ArrayList<>();Map response = new HashMap<>();for (int i = 0; i < count; i++) {demo.add(String.format("Permission_%s", id + i));}response.put("permissions",demo);return response;}}

dubbo-provider子项目的pom文件中加入公共接口所在的依赖包。

chunming.liudubbo-api1.0-SNAPSHOT

用Spring配置声明暴露服务,在dubbo-provider子项目的resources目录下,创建META-INF/spring目录,并在其中创建 Spring 的核心配置文件 applicationContext,起名叫 dubbo-provider-applicationContext.xml。

为了使这个配置生效,需要在dubbodemo项目的pom文件中加入如下依赖:

org.springframeworkspring-context5.2.7.RELEASEorg.apache.dubbodubbo2.7.8org.apache.zookeeperzookeeper3.6.1org.apache.curatorcurator-framework4.0.1org.apache.curatorcurator-recipes4.0.1

其实这个依赖加入到dubbo-provider子项目的pom文件中也是可以的。只不过因为这些依赖在dubbo-consumer子项目中也会用到,放到dubbodemo项目的pom文件中之后,就不需要在dubbo-consumer子项目再引用一次了。

现在,就可以编写启动dubbo-provider服务的类了。在chunming.liu.dubbo.provider包中创建Provider类,代码如下:

public class Provider {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/dubbo-provider-applicationContext.xml");context.start();System.out.println("服务已经启动了");System.in.read();}}

至此,dubbo-provider服务就写完了。通过运行Provider类就可以启动服务了。

2. 测试Dubbo项目

2.1 创建java版客户端

创建一个dubbo-consumer子项目,用来测试dubbo-provider。创建方法也是参考1.2小节。项目的pom文件中加入公共接口所在的依赖包:

chunming.liudubbo-api1.0-SNAPSHOT

通过Spring配置引用远程dubbo服务,方法是:在resources目录下创建文件夹META-INF/spring,其中创建Spring框架配置文件dubbo-consumer-applicationContext.xml,内容如下:

编写Consumer.java调用远程dubbo服务的接口:

public class Consumer {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/dubbo-consumer-applicationContext.xml");context.start();System.out.println("客户端已经启动");IDubboService dubboService = context.getBean(IDubboService.class);System.out.println("消费");System.out.println(dubboService.getPermissins("test", 5)); //调用远程dubbo接口}}

启动Consumer,将会得到如下输出:

客户端已经启动消费{permissions=[Permission_test0, Permission_test1, Permission_test2, Permission_test3, Permission_test4]}

2.2 创建Python版客户端

很多同学是使用Python做软件测试的,Python也可以调用远程dubbo接口,代码如下:

import telnetlibclass Dubbo(telnetlib.Telnet):prompt = 'dubbo>'coding = 'utf-8'def __init__(self, host=None, port=0, timeout=3000):super().__init__(host, port, timeout)self.write(b'\n')def command(self, flag, str_=""):data = self.read_until(flag.encode())self.write(str_.encode() + b"\n")return datadef invoke(self, service_name: str, method_name: str, arg: str):command_str = "invoke {0}.{1}({2})".format(service_name, method_name, arg)print(command_str)self.command(Dubbo.prompt, command_str)data = self.command(Dubbo.prompt, "")return data.decode(Dubbo.coding, errors='ignore').split('\n')[1].strip()if __name__ == '__main__':conn = Dubbo('127.0.0.1', 20880)result = conn.invoke("chunming.liu.dubbo.api.IDubboService","getPermissins","'test',5")print(result)

4. Dubbo管理后台

可以通过Dubbo管理控制台管理provider和consumer。我们现在学习下如何搭建和使用Dubbo管理后台。

4.1 搭建dubbo-admin

参考https://github.com/apache/dubbo-admin#production-setup这个section,就可以搭建起来。下面一步一步来做一下。

克隆代码到本地git clone https://github.com/apache/dubbo-admin.git

配置注册中心地址,就是zookeeper的地址啦。编辑dubbo-admin-server/src/main/resources/application.properties,设置实际的zookeeper地址。

# centers in dubbo2.7admin.registry.address=zookeeper://127.0.0.1:2181admin.config-center=zookeeper://127.0.0.1:2181admin.metadata-report.address=zookeeper://127.0.0.1:2181

启动Dubbo-admin,有两种方法:1)mvn --projects dubbo-admin-server spring-boot:run

2)cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar

访问http://localhost:8080,使用用户名root,密码root登录。

4.2 查看dubbo服务

进入首页之后可以看到下面的内容。

基础信息部分可以看到服务的提供者和服务名。

服务信息部分可以看到我们提供的服务

也可以在服务测试页面,对dubbo接口进行测试。

dubbo-admin还提供服务治理功能。

5. 参考资料

https://blog.csdn.net/noaman_wgs/article/details/70214612

https://gitee.com/qianxunclub/java-demo/tree/master/chapter-2

https://www.cnblogs.com/wangmingshun/p/6383576.html

https://www.cnblogs.com/victorbu/p/10895676.html

https://github.com/apache/dubbo-admin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值