mechanize 是一个Python库,它模拟了一个网页浏览器,可以用来自动化与网站的交互,如填写表单、跟随链接、处理cookies等。尽管它在过去被广泛用于网页爬虫和自动化测试,但需要注意的是,随着网站技术的发展,特别是动态内容和复杂JavaScript交互的增多,mechanize可能无法处理所有现代网站的功能,因为它不支持执行JavaScript。
基本用途包括:
自动化表单提交:可以填写和提交网页上的表单,这对于测试网站的表单功能特别有用。
点击链接:可以遍历页面上的链接并模拟点击,自动导航到下一个页面。
管理Cookies:自动处理cookies,就像浏览器一样,这对于需要保持会话状态的网站很重要。
处理重定向:能自动处理HTTP重定向。
自定义头部:可以设置HTTP请求头,比如User-Agent,模拟不同的浏览器或环境。
示例代码:
import mechanize
# 创建一个Browser对象
br = mechanize.Browser()
# 设置浏览器的一些属性
br.set_handle_robots(False) # 不遵守robots.txt规则
br.addheaders = [('User-agent', 'Mozilla/5.0')] # 设置User-Agent
# 访问一个网页
response = br.open("http://example.com")
# 选择一个表单并填写数据
for form in br.forms():
if form.attrs.get('id') == 'some_form_id': # 假设表单有一个id为'some_form_id'
br.select_form(nr=0) # 或者使用索引选择表单
br.form['username'] = 'your_username' # 填写用户名
br.form['password'] = 'your_password' # 填写密码
break
# 提交表单
response = br.submit()
# 打印响应内容
print(response.read())
尽管mechanize在处理静态网页方面很有用,但对于高度动态的网站和复杂的前端交互,可能需要结合或转向使用像Selenium这样的工具,它能够驱动真实浏览器,支持JavaScript执行。
在自动化测试中,mechanize可以应用于多种场景,尽管它的能力有限,尤其是在处理JavaScript交互方面,但它依然适合于一些基础的Web自动化任务。以下是五个自动化测试场景及示例代码概述:
1. 登录功能测试
场景:验证网站的登录功能是否正常,包括正确和错误的用户名密码组合。
示例代码:
import mechanize
br = mechanize.Browser()
br.open("http://yourwebsite.com/login")
br.select_form(nr=0) # 假设登录表单是第一个表单
br["username"] = "testuser"
br["password"] = "correctpassword"
response = br.submit()
if "Welcome, testuser!" in response.get_data(): # 假设登录成功会有欢迎信息
print("登录成功")
else:
print("登录失败")
# 测试错误的凭据
br.open("http://yourwebsite.com/login")
br.select_form(nr=0)
br["username"] = "testuser"
br["password"] = "wrongpassword"
response = br.submit()
if "Invalid credentials" in response.get_data(): # 假设错误信息包含"Invalid credentials"
print("错误凭据测试通过")
else:
print("错误凭据测试失败")
2. 链接有效性检查
场景:遍历网站上的所有外部链接,检查它们是否有效(HTTP状态码200)。
示例代码:
import mechanize
def check_links_on_page(url):
br = mechanize.Browser()
br.follow_redirects = True
br.open(url)
for link in br.links():
if link.url.startswith("http"): # 只检查外部链接
try:
response = br.open(link.url)
if response.code != 200:
print(f"Link {link.url} is broken, status code: {response.code}")
except mechanize.HTTPError as e:
print(f"Error accessing {link.url}: {e}")
check_links_on_page("http://yourwebsite.com")
3. 表单提交测试
场景:测试不同表单提交情况,比如注册表单、联系表单等。
示例代码:
# 假设测试一个联系表单提交
br = mechanize.Browser()
br.open("http://yourwebsite.com/contact")
br.select_form(nr=0)
br["name"] = "Test User"
br["email"] = "test@example.com"
br["message"] = "This is a test message."
response = br.submit()
if "Thank you for your message" in response.get_data(): # 假设成功提交会有感谢信息
print("表单提交成功")
else:
print("表单提交失败")
4. Cookie处理测试
场景:验证网站的cookie设置和管理是否正确。
示例代码:
br = mechanize.Browser()
br.open("http://yourwebsite.com/setcookie")
# 假设访问此页面会设置cookie
print("Initial cookies:", br.cookiejar)
br.open("http://yourwebsite.com/cookiepage") # 假设此页面读取并显示cookie
response_text = response.read()
if "Cookie value here" in response_text: # 替换为实际cookie值的检查
print("Cookie handling test passed")
else:
print("Cookie handling test failed")
5. 重定向测试
场景:确保特定操作(如登录、提交表单)后的重定向行为符合预期。
示例代码:
br = mechanize.Browser()
br.open("http://yourwebsite.com/login")
br.select_form(nr=0)
br["username"] = "testuser"
br["password"] = "correctpassword"
response = br.submit()
final_url = response.geturl()
expected_url = "http://yourwebsite.com/dashboard" # 登录后预期的URL
if final_url == expected_url:
print("Redirect after login test passed")
else:
print(f"Redirect test failed. Expected: {expected_url}, got: {final_url}")
请根据具体网站结构和测试需求调整示例代码。记住,mechanize不适合处理复杂的JavaScript交互,对于这类场景,考虑使用Selenium等工具。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!