Python测试脚本
我正在尝试为一个网站自动化测试脚本。
我遇到了以下错误:
import urllib , urllib2 , cookielib , random ,datetime,time,sys
cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(urlOpener)
username=username.strip()
values = {'username': username, 'password': 'password'} #user input
data = urllib.urlencode(values)
request = urllib2.Request('http://141.168.25.182/',data)
url = urlOpener.open(request)
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/urllib2.py", line 364, in open
response = meth(req, response)
File "/usr/lib/python2.4/urllib2.py", line 471, in http_response
response = self.parent.error(
File "/usr/lib/python2.4/urllib2.py", line 402, in error
return self._call_chain(*args)
File "/usr/lib/python2.4/urllib2.py", line 337, in _call_chain
result = func(*args)
File "/usr/lib/python2.4/urllib2.py", line 480, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden
3 个回答
0
如果你想为一个网页应用程序自动化测试,你可以使用Selenium,然后做一些类似下面的事情。
from selenium import webdriver
# Create an instance of a browser
browser = webdriver.Firefox()
# Open homepage
browser.get("http://141.168.25.182")
# Find username and password fields (i do not know what ids your input fields actually have)
username_input = browser.find_element_by_id("username")
password_input = browser.find_element_by_id("password")
# Fill in username and password fields
username_input.send_keys("test_username")
password_input.send_keys("test_password")
# Find and click on the login button
browser.find_element_by_id("login").click()
# Check that you are signed in by finding a sign out button
browser.find_element_by_id("signout")
0
我建议你使用 mechanize 这个工具。这样可以减少很多麻烦。你的代码大概会像这样:
import mechanize
base_url = "http://someurl"
login_url = base_url + "/login"
protected_url = base_url + "/potected"
b = mechanize.Browser()
b.visit(login_url)
b.add_password(base_url, "user", "secret", "some Realm")
b.open(login_url)
b.open(protected_url)
你还可以使用 mechanize 的表单提交和 .click 方法。
1
这里有一些建议,可能对你有帮助。
urlencode 函数和你想的不同
>>> from urllib import urlencode
>>> values = {'username': 'username', 'password': 'password'}
>>> data = urlencode(values)
>>> data
'username=username&password=password'
>>>
请求方法的参数又不对了
当你这样做的时候,数据就是请求的负载。
request = urllib2.Request('http://141.168.25.182/',data)
你想要做的是进行身份验证。
这取决于服务器期望什么样的身份验证。下面的内容是使用 urllib2 进行基本身份验证的示例。想了解更多细节,可以查看这个模块的文档。
import urllib2
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(user='..', passwd='...')
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
urllib2.urlopen('url)