项目实战的流程
务必记清楚:
1、需求分析(熟悉业务,最好已经做过多次手工测试)
2、测试方案。 (为什么要自动化,主要应用场景,主要使用模块,技术选型和对比,方案特点和优势、具体运行手册、产出和效率、运行策略、维护。)
3、用例编写
4、用例评审
5、运行用例(代码编写)
6、报告
技术选型
使用哪一种语言:python / java : python开发效率更快,因为我会,python好招人,
web: selenium /:
单元测试框架:pytest / unittest:
PO 模式, 数据驱动,关键字驱动。
最好是做一个对比。
方案的特点:好招人,好维护,开发效率高。
自动化适用场景
需求稳定,不会频繁变更。
研发和测试周期长,需要频繁执行回归测试
需要在多种平台上重复运行相同测试的场景
某些测试项目通过手工测试无法实现,或者手工成本太高
被测软件的开发较为规范,能够保证系统的可测试行
===============================================================================
案例1:
tests模块
测试登录功能
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestLogin:
def test_login_without_username_and_password(self):
"""测试没有用户名和密码的情况。
尽量通过测试用例的函数名称表示测试的测试点。
梳理测试步骤:、
1、打开浏览器
2、访问测试页面
3、点击提交
4、断言
"""
driver = webdriver.Chrome()
url = 'https://v4.ketangpai.com/User/login.html'
driver.get(url)
# 定位登录按钮
login_btn = driver.find_element(By.XPATH, "//div[contains(@class, 'pt-login')]/a[@class='btn-btn']")
login_btn.click()
# expect 预期结果
expected = ['账号不能为空', '密码不能为空']
# 实际结果:
actual = driver.find_elements(By.CLASS_NAME, 'error-tips')
# 两次断言
# enuerate 可以同时获取索引和值
# for index, el in enumerate(actual):
# # el WebElement
# assert el.text == expected[index]
# actual_value = []
# for el in actual:
# actual_value.append(el.text)
# 列表推导式
actual_value = [el.text for el in actual]
assert expected == actual_value
===========================================
案例2:
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestLogin:
def test_login_without_username_and_password(self):
"""测试没有用户名和密码的情况。
尽量通过测试用例的函数名称表示测试的测试点。
梳理测试步骤:、
1、打开浏览器
2、访问测试页面
3、点击提交
4、断言
"""
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
url = "https://jobs.bytedance.com"
driver.get(url)
# 定位登录按钮
dl_login = driver.find_element(By.XPATH,'//a[@href="/experienced/login"]')
dl_login.click()
yx_login = driver.find_element(By.XPATH,'//div[contains(text(),"邮箱登录")]')
yx_login.click()
# 定位登录按钮
login_btn = driver.find_element(By.XPATH,'//button[@type="button"]')
login_btn.click()
# expect 预期结果
expected = ['请输入邮箱', '请输入密码']
# 实际结果:
actual = driver.find_elements(By.XPATH,'//div[@class="atsx-form-explain"]')
actual_value = []
for el in actual:
actual_value.append(el.text)
assert expected == actual_value
def test_login_without_username_and_password_02(self):
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
url = "https://jobs.bytedance.com"
driver.get(url)
# 定位登录按钮
dl_login = driver.find_element(By.XPATH, '//a[@href="/experienced/login"]')
dl_login.click()
yx_login = driver.find_element(By.XPATH, '//div[contains(text(),"邮箱登录")]')
yx_login.click()
usre = "111"
driver.find_element(By.XPATH,'//input[@id="email"]').send_keys(usre)
password = "1"
driver.find_element(By.XPATH,'//*[@id="password"]').send_keys(password)
# 定位登录按钮
login_btn = driver.find_element(By.XPATH, '//button[@type="button"]')
login_btn.click()
# expect 预期结果
expected = ['请输入正确的邮箱']
# 实际结果:
actual = driver.find_elements(By.XPATH, '//div[@class="atsx-form-explain"]')
actual_value = []
for el in actual:
actual_value.append(el.text)
assert expected == actual_value
===========================================================
案例3:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestLogin:
def test_login_without_username_and_password(self):
"""测试没有用户名和密码的情况。
尽量通过测试用例的函数名称表示测试的测试点。
梳理测试步骤:、
1、打开浏览器
2、访问测试页面
3、点击提交
4、断言
"""
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
url = "https://v4.ketangpai.com/User/login.html"
driver.get(url)
user = "135607489"
driver.find_element(By.XPATH,'//input[@placeholder="邮箱/账号/手机号"]').send_keys(user)
password = "wtg4444"
driver.find_element(By.XPATH,'//input[@placeholder="密码"]').send_keys(password)
# 定位登录按钮
yx_login = driver.find_element(By.XPATH,'//div[@class="padding-cont pt-login"]//a[@class="btn-btn"]')
yx_login.click()
# 断言页面标题
time.sleep(1)
assert driver.current_url == "https://v4.ketangpai.com/Main/index.html"
user_elem = driver.find_element(By.XPATH,'//a[@id="user"]//img[@class="avatar"]')
assert user_elem.get_attribute("title") == "十七"