测试用例 1
测试对象: B站 (B站登录) https://passport.bilibili.com/login只简单测试了登录功能,而且还没完善, 没完善的内容是, B站登录需要一个验证码, 我这点没有实现, 所以是选择手动点击图片验证码,下面还有一个GitHub的登录测试用例, GitHub登录时不需要验证码分析b站的登录网页的数据结构输入账号的文本框输入密码的文本框登录的点击按钮先创建一个测试用例文件 test_bilibili.py 文件,在里面编写测试用例
"""
测试用例
测试对象: B站 (B站登录) https://passport.bilibili.com/login
"""
import unittest
import time
from parameterized
import parameterized
from selenium
import webdriver
class TestLogin(unittest
.TestCase
):
"""
1. 打开浏览器 : 就使用 setUp(self)方法打开浏览器
2. 查找用户名输入框
3. 查找密码的输入框
4. 点击登录
5. 断言登录成功与否 使用登录后的页面上的用户名进行断言
"""
def setUp(self
) -> None:
self
.driver
= webdriver
.Chrome
("../chromedriver.exe")
self
.driver
.get
("https://passport.bilibili.com/login")
def tearDown(self
) -> None:
self
.driver
.close
()
self
.driver
.quit
()
def test_login(self
):
username
= "这里输入你的账号"
password
= "这里输入你的密码"
time
.sleep
(1)
self
.driver
.find_element_by_id
("login-username").clear
()
self
.driver
.find_element_by_id
("login-username").send_keys
(username
)
time
.sleep
(1)
self
.driver
.find_element_by_id
("login-passwd").clear
()
self
.driver
.find_element_by_id
("login-passwd").send_keys
(password
)
time
.sleep
(0.5)
self
.driver
.find_element_by_class_name
("btn-login").click
()
time
.sleep
(10)
handle
= self
.driver
.current_window_handle
self
.driver
.switch_to
.window
(handle
)
index
= self
.driver
.find_element_by_xpath
('//*[@id="primaryPageTab"]/ul/li[1]/a/span').text
self
.assertEqual
(index
, "首页", msg
='登录失败')
然后编写执行文件text_run.py 文件, 用来执行测试用例
import unittest
from BeautifulReport
import BeautifulReport
"""
使用run文件执行unittest 文件时, 可以直接导入
这时 unittest 会自动查找导入问价中类去执行
但是文件的开头以test 文件的类和函数也必须以test开头
"""
if __name__
== '__main__':
"""
defaultTestLoader
使用unittest.defaultTestLoader()类, 这个类的作用就是,调用这个类的discover()方法, 搜索指定目录下指定开头的.py文件,
并将搜索到的测试用例组装成一个测试集合, 听上去是不是和 TestSuite 的作用差不多
"""
test_dir
= "."
dis
= unittest
.defaultTestLoader
.discover
(test_dir
, pattern
='test_bilibili.py')
runner
= BeautifulReport
(dis
)
runner
.report
(
description
="b站登录",
filename
="bilibili_login"
)
这个只能输入一个账号, 看上去很不方便,我在介绍一个很好用的模块, 这个模块就像是一个装饰器 先安装
pip install parameterized
然后把测试用例test_bilibili.py改为如下
"""
测试用例
测试对象: B站 (B站登录) https://passport.bilibili.com/login
"""
import unittest
import time
from parameterized
import parameterized
from selenium
import webdriver
class TestLogin(unittest
.TestCase
):
"""
1. 打开浏览器 : 就使用 setUp(self)方法打开浏览器
2. 查找用户名输入框
3. 查找密码的输入框
4. 点击登录
5. 断言登录成功与否 使用登录后的页面上的用户名进行断言
"""
data
= [
('账号', '密码'),
('账号', '密码'),
('账号', '密码'),
]
def setUp(self
) -> None:
self
.driver
= webdriver
.Chrome
("../chromedriver.exe")
self
.driver
.get
("https://passport.bilibili.com/login")
def tearDown(self
) -> None:
self
.driver
.close
()
self
.driver
.quit
()
@parameterized
.expand
(data
)
def test_login(self
, username
, password
):
time
.sleep
(1)
self
.driver
.find_element_by_id
("login-username").clear
()
self
.driver
.find_element_by_id
("login-username").send_keys
(username
)
time
.sleep
(1)
self
.driver
.find_element_by_id
("login-passwd").clear
()
self
.driver
.find_element_by_id
("login-passwd").send_keys
(password
)
time
.sleep
(0.5)
self
.driver
.find_element_by_class_name
("btn-login").click
()
time
.sleep
(10)
handle
= self
.driver
.current_window_handle
self
.driver
.switch_to
.window
(handle
)
index
= self
.driver
.find_element_by_xpath
('//*[@id="primaryPageTab"]/ul/li[1]/a/span').text
self
.assertEqual
(index
, "首页", msg
='登录失败')
整个测试的流程已经写完了, 有很大的瑕疵, 就在没有完成自动点击图片验证, 直接看下一个吧
测试用例 2
测试对象: GitHub (登录) https://github.com/login先分析网页结构,查找登录时账号的文本输入框在定位密码的输入文本框在 定位登录按钮登录成功后进行断言, 如果在登录后的界面出现你的用户名,就代表成功.否则视为失败 创建测试用例文件 test_git.py
"""
测试用例
测试对象: github https://github.com/login
"""
import unittest
import time
from parameterized
import parameterized
from selenium
import webdriver
class TestLogin(unittest
.TestCase
):
"""
1. 打开浏览器 : 就使用 setUp(self)方法打开浏览器
2. 查找用户名输入框
3. 查找密码的输入框
4. 点击登录
5. 断言登录成功与否 使用登录后的页面上的用户名进行断言
"""
data
= [
("账号", "密码"),
('sssssss-dss', 'nisshui1'),
]
def setUp(self
) -> None:
self
.driver
= webdriver
.Chrome
("../chromedriver.exe")
self
.driver
.get
("https://github.com/login")
def tearDown(self
) -> None:
self
.driver
.close
()
self
.driver
.quit
()
@parameterized
.expand
(data
)
def test_login(self
, username
, password
):
time
.sleep
(1)
self
.driver
.find_element_by_id
("login_field").clear
()
self
.driver
.find_element_by_id
("login_field").send_keys
(username
)
time
.sleep
(1)
self
.driver
.find_element_by_id
("password").clear
()
self
.driver
.find_element_by_id
("password").send_keys
(password
)
time
.sleep
(0.5)
self
.driver
.find_element_by_class_name
("btn-primary").click
()
time
.sleep
(1)
handle
= self
.driver
.current_window_handle
self
.driver
.switch_to
.window
(handle
)
index
= self
.driver
.find_element_by_xpath
("//span[@class='flex-shrink-0 css-truncate css-truncate-target']").text
self
.assertEqual
(index
, username
, msg
='登录失败')
编写执行文件 test_git_run.py
import unittest
from BeautifulReport
import BeautifulReport
"""
使用run文件执行unittest 文件时, 可以直接导入
这时 unittest 会自动查找导入问价中类去执行
但是文件的开头以test 文件的类和函数也必须以test开头
"""
if __name__
== '__main__':
"""
defaultTestLoader
使用unittest.defaultTestLoader()类, 这个类的作用就是,调用这个类的discover()方法, 搜索指定目录下指定开头的.py文件,
并将搜索到的测试用例组装成一个测试集合, 听上去是不是和 TestSuite 的作用差不多
"""
test_dir
= "."
dis
= unittest
.defaultTestLoader
.discover
(test_dir
, pattern
='test_git.py')
runner
= BeautifulReport
(dis
)
runner
.report
(
description
="Github 登录",
filename
="Github_login"
)
我只使用了两个账号信息, 一对一错, 测试报告如下