《Web接口开发与自动化测试基于Python语言》--第12章

来源:互联网 发布:怎么玩转淘宝千人千面 编辑:程序博客网 时间:2024/05/16 04:42

第12章 Web Services

Web Services技术已经不在流行,但并未完全不再使用。本章内的REST也属于Web Services范围内。

12.1 Web Services相关概念

  • SOA

全称是Service-Oriented Architecture,中文意思是面向服务框架,又称为“面向服务的体系结构”。

SOA的提出是在企业计算领域,就是要将紧耦合的系统,划分为面向业务的,粗粒度、松耦合、无状态的服务。服务发布出来供其他服务调用,一组互相依赖的服务就构成了SOA架构下的系统。

SOA的特性: 一种粗粒度、松耦合的服务架构,服务之间通过简单、精确定义接口进行通信,不涉及底层编程接口和通信模型。

  • SOA与Web Services

现在几乎所有的SOA应用场合都是和Web Services绑定的,所以有时候这两个概念不免混用。不可否则Web Services是限制最适合实现SOA的技术,SOA的走红很大程度上归功于Web Services标准的成熟和应用普及。因为现在大家基本上认同Web Services技术在几方面体现了SOA的需要。

  • Web Services

HTTP是互联网上应用最为广泛的一种网络传输协议,而Web Services是一种部署在Web上的对象或者是应用程序组件,Web Services数据的传输同样需要借助HTTP协议。

Web Services是一个平台独立的、低耦合的、自包含的、基于可编程的Web应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的、互操作的应用程序。

  • SOAP

Simple Object Access Protocol,即简单对象访问协议。

SOAP是基于XML在分散或分布式的环境中交换信息的简单的协议,允许服务提供者和服务客户经过防火墙在互联网上进行通信。

SOAP消息可以在多种消息传输模式中使用,包括超文本传输协议(HTTP)、简单邮件传输协议(SMTP)以及多用途网际邮件扩充协议(MIME),还支持消息系统、远程过程调用协议(RPC)等应用程序。大部分情况还是绑定在HTTP协议上面传输。

  • WSDL

Web Services Description Language,网络服务描述语言,它是一门基于XML的语言,用于描述Web Services以及如何对它们进行访问。

WSDL文档主要使用以下几个元素来描述某个Web Services:

<portType> Web Services执行的操作<message>  Web Services使用的消息<types>    Web Services使用的数据类型<binding>  Web Services使用的通信协议
  • UDDI

Universal Description Discovery and Integration,通用描述、发现与集成服务。

UDDI是一个独立于平台的框架,通过使用Internet来描述服务,发现企业,并对企业服务进行集成。

UDDI是一种用于存储有关Web Services的信息的目录:

UDDI是一种由WSDL描述的Web Services界面的目录
UDDI经由SOAP进行通信
UDDI被构建如了微软的.NET平台

综上所述,SOAP、WSDL、UDDI构成了Web Services的三要素。

12.2 Web Services的开发与调试

Python并不擅长开发Web Services接口,但是各种库都有,所以也能用。

12.2.1 suds-jurko调用接口

Suds是Web Services客户端中一个轻量级的基于SOAP的Python客户端。

Suds-jurko基于Suds,支持Python3。

wexml.com.cn网站提供了一些已经发布的Web Services接口,可以直接调用。

eg:soap_client.py

#! /usr/bin/python# -*- coding:utf-8 -*-from suds.client import Client# 使用库suds_jurko:https://bitbucket.org/jurko/suds# Web Services查询:http://www.webxml.com.cn/zh_cn/web_services.aspx# 电话号码归属地查询url = 'http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl'client = Client(url)print client

该接口提供getMobileCodeInfo()方法来查询手机号码归属地,方法接收两个参数:mobileCode(手机号)、userID(注册网站之后随机分配的用户ID)。

继续完善该脚本:

#! /usr/bin/python# -*- coding:utf-8 -*-from suds.client import Client# 使用库suds_jurko:https://bitbucket.org/jurko/suds# Web Services查询:http://www.webxml.com.cn/zh_cn/web_services.aspx# 电话号码归属地查询url = 'http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl'client = Client(url)result = client.service.getMobileCodeInfo('13012341234')print result

运行后就能得到查询结果:

>python3 soap_client.py13012341234: 北京 北京 北京联通GSM卡

再来一个查询天气的接口:soap_client2.py

#! /usr/bin/python# -*- coding:utf-8 -*-from suds.client import Clientfrom suds.xsd.doctor import ImportDoctor, Import# 使用库suds_jurko:https://bitbucket.org/jurko/suds# Web Services查询:http://www.webxml.com.cn/zh_cn/web_services.aspxurl = 'http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl'imp = Import('http://www.w3.org/2001/XMLSchema',            location='http://www.w3.org/2001/XMLSchema.xsd')imp.filter.add('http://Webxml.com.cn/')client = Client(url, plugins=[ImportDoctor(imp)])result = client.service.getWeatherbyCityName("北京")print result

运行后,就可以得到一个北京的详细的天气预报结果。

12.2.2 spyne开发接口

soaplib是一个简单的、易于扩展的SOAP库,是用于创建和发布SOAP Web Services的专业工具。

spyne是一个传输与体系结构无关的RPC库,专注于公开服务并且具有良好定义的APIS,它是到目前还在维护的Web Services应用开发库,它的使用方法和soaplib一样简单,并且支持Python3。

12.3 JMeter测试SOAP接口

这个JMeter的存在版本差异,实在是找不到对应配置,这里直接忽略,跨过去好了。

总结

本章主要是讲解Web Services,看大家是否适用吧,如果适用就增加一些了解,不适用就忽略。

阅读全文
0 0