我正在开发一个用于测试 Web 服务的自动化测试框架。Web 服务是 SOAP 并用 Java 实现(通过 Apache Axis2),但是,我们的测试是用 Python 实现的,并使用 suds 库向服务器发出请求。这些测试是测试场景的高级测试,例如备份用户的数据。
现在这个 Web 服务很复杂,因为某些方法需要传递许多不同类型的对象,并且经常需要调用其他方法来获取某些对象。例如,我们有一个备份用户的调用,该用户的 pre-reqs 如下所示:
- 调用 getUser() 方法检索对象 User
- 调用 getDataset() 方法检索对象 Dataset
- 调用方法 getXService() 来检索对象 XService
- 调用方法 doBackup(User, Dataset, XService) 开始备份
这只是我们的一个调用的一个简单示例,它在进行主要调用之前还有许多其他先决条件调用。由于这些场景需要在测试中经常执行,我想抽象一组调用以便执行上述备份,我只需要调用一个为我调用其他方法的方法。
我的问题是,我是否应该以面向对象的方式执行此操作,并且几乎创建映射到 Java 版本对象的 Python 类的一对一映射?所以我的测试框架将只包含类,所以我可以这样做:
# User, XService, and Dataset are classes that correspond with
# types implemented in the SOAP web service
from lib import XService, Dataset
class User():
def __init__(self, **kwargs):
self.id = kwargs.get('id', None)
def create(self):
soap_client.call('createClient', self.id)
def backup(self):
dataset = Dataset.get(1234)
service = XService.getInstance()
soap_client.call('doBackup', self, dataset, service)
所以我所要做的就是调用 backup() 而不是每次都发出 3 种不同的方法。
这样做的缺点是我必须为服务器上的每个类型创建一个对象。此外,测试端的对象可能会变得陈旧,因为它们不与服务器上的数据同步。
我的另一个想法是不要走面向对象的路线,而只使用诸如 backupUser() 或 restoreBackupToUser() 之类的方法创建一个模块,然后将它们提供给从服务器返回的实际数据对象。这种方法将解决陈旧数据问题,但也会创建难以维护的大量模块。
遇到此问题的任何人都可以对我的方法提供一些提示或批评。也许我想太多了,有更好的方法来测试 Web 服务方法。