FunkLoad安装使用(三):编写测试脚本

funkload编写脚本

前面已经分别对Funkload在常用系统下的安装,以及基础的使用做了介绍,那么本章将分享怎么去编写FunkLoad的脚本。

下面是具体的FunkLoad脚本编写说明:

1、发出HTTP请求
1)HTTP GET
执行HTTP GET请求的示例:
self.get(self.server_url + "/logout", description="Logout ")
self.get(self.server_url + "/search?query=foo",
         description="Search with params in the URL")
self.get(self.server_url + "/search", params=[['query', 'foo']],
         description="Search using params")

2)HTTP POST
执行HTTP POST请求的示例:
from webunit.utility import Upload
from funkload.utils import Data
...

# simple post
self.post(self.server_url + "/login",
          params=[['user_name', 'scott'],
                  ['user_password', 'tiger']],
          description="Login as scott")

# upload a file
self.post(self.server_url + "/uploadFile",
          params=[['file', Upload('/tmp/foo.pdf'),
                  ['title', 'foo file']],
          description="Upload a file")

# post with text/xml content type
self.post(self.server_url + "/xmlAPI",
          params=Data('text/xml', 'bar'),
          description="Call xml API")

3)HTTP PUT / DELETE:
from funkload.utils import Data
...
self.put(self.server_url + '/xmlAPI",
         Data('text/xml', 'bar',
         description="Put query")
self.delete(self.server_url + '/some/rest/path/object',
            description="Delete object')

4)xmlrc助手:
ret = self.xmlrpc(server_url, 'getStatus',
                  description="Check getStatus")

在发出请求时,应始终设置描述,提高报表的可读性。
如果在调试模式下运行测试,可以看到发送的内容。使用 --debug --debug-level = 3选项激活调试模式。
通过使用-V选项运行测试,你将在运行的Firefox实例中看到每个响应。
2、添加断言
在每个请求之后,你应该添加断言以确保处于预期页面。
你可以使用self.getBody()检查响应内容
self.get(server_url, description="home page")
self.assert_('Welcome' in self.getBody(), "Wrong home page")

你可以检查预期的HTTP返回码:
ret = self.get(...)
self.assert_(ret.code in [200, 301], "expecting a 200 or 301")

请注意,FunkLoad默认测试HTTP返回代码,假设任何代码不是200,301,302是一个错误。这可以使用ok_codes参数或配置文件选项来更改:
ret = self.get(self.server_url + '/404.hmtl', ok_codes=[200, 404],
           description="Accept 404")
self.assert_(ret.code == 404)

你可以检查返回的URL,如果被重定向可能会有所不同:
self.post(self.server_url + "/login",
          params=[['user_name', 'scott'],
                  ['user_password', 'tiger']],
          description="Login as scott")
self.assert_('dashboard' in self.getLastUrl(), "Login failure")

3、基本认证
self.setBasicAuth('scott', 'tiger')
self.get(self.server_url, description="GET using basic auth")

# remove basic auth
self.clearBasicAuth()
4、额外headers:
self.setHeader('Accept-Language', 'de')
# this header is set for all the next requests
...
# Remove all additional headers
self.clearHeaders()
5、提取信息
在某些时候,你需要从响应中提取信息。在可能的情况下,使用字符串方法或re(正则表达式)模块进行搜索。解析XML或HTML具有如此高的成本,它将阻止你的测试实现高负载。
FunkLoad附带一个简单的extract_token,使用字符串查找方法:
from funkload.utils import extract_token
...
token = extract_token(self.getBody(), 'id="mytoken" value="', '"')

当然,对于纯功能测试,你可以使用FunkLoad助手:
ret = self.get(self.server_url, description="Get some page")
urls = self.listHref(url_pattern="view_document",
                     content_pattern="View")
base_url = self.getLastBaseUrl()

或者使用WebUnit minidom:
title = self.getDom().getByName('title')[0].getContents()
或任何Python的HTML / HTML处理库,包括Beautiful Soup。
6、使用配置文件
你可以使用适当的self.conf_get*(section, key)方法从配置文件获取信息:
# Getting value from the main section
value = self.conf_get('main', 'key', 'default')
count = self.conf_getInt('main', 'nb_docs', 10)
percent = self.conf_getFloat('main', 'percent', 5.5)
items = self.conf_getList('main', 'names')

# The names in the conf file are separated with a colon
# names=name1:name2:name3

7、共享凭据
如果你需要在测试之间共享凭据,则可以使用FunkLoad凭据服务器。以下是请求凭据的示例:
from funkload.utils import xmlrpc_get_credential
...

# get the credential host and port from the config file
credential_host = self.conf_get('credential', 'host')
credential_port = self.conf_getInt('credential', 'port')

# get a login/pwd from the members group
login, password = xmlrpc_get_credential(credential_host,
                                        credential_port,
                                        'members')

从FunkLoad 1.15开始,凭证服务器可以返回一个序列:
from funkload.utils import xmlrpc_get_seq
...
seq = xmlrpc_get_seq()

序列从0开始,但可以在凭证服务器配置文件中初始化。
8、生成数据
FunkLoad附带一个简单的随机文本生成器Lipsum:
>>> from funkload.Lipsum import Lipsum
>>> print 'Word: %s ' % (Lipsum().getWord())
Word: albus

>>> print 'UniqWord: %s ' % (Lipsum().getUniqWord())
UniqWord: fs3ywpxg

>>> print 'Subject: %s ' % (Lipsum().getSubject())
Subject: Fulvus orientalis albus hortensis dorsum

上一页12下一页


留言