python+selenium+pytest自动化测试
前言
之前使用的unittest,考虑到pytest更友好,故要进行代码的转化。
一、unittest转pytest
1.修改项
1.import pytest
2.文件名修改为以test开头,如test_xxx.py
3.类修改为以Test开头,如Test_xxx():
4.方法修改为以test开头,如test_xxx
5.断言修改为assert xxx=“xxx”
6.前置修改为setup_class
7.后置修改为teardown_class
8.主函数修改为pytest.main()
9.File->Settings->Python Integrated Tools,默认运行改为pytest
2.具体代码
原代码:
test_login.py
# coding=utf-8
# 用例集
import sys
import os
import warnings
import time
from selenium import webdriver
from business.login_business import LoginBusiness
import unittest
from slog.user_log import UserLog
from base.basepage import DriverUtil
curPath = os.path.abspath(os.path.join(os.getcwd()))
sys.path.append(curPath)
class LoginCase(unittest.TestCase):
driver = None
@classmethod
def setUpClass(self):
self.driver = DriverUtil.getWebDriver() #驱动设置
self.lo = LoginBusiness(self.driver) #实例化
warnings.simplefilter('ignore', ResourceWarning)
def tearDown(self):
DriverUtil.screenShot(self)
# @classmethod
# def tearDownClass(self):
# self.driver.close()
def test01_login_username_error(self):
username_error = self.lo.login_error("admin123", "admin123")
self.assertFalse(username_error, "失败")
#是否为False,为False就是正确的
#通过assert判断是否为error
def test02_login_password_error(self):
password_error = self.lo.login_error("admin", "admin")
self.assertFalse(password_error, "失败")
def test03_login_success(self):
success = self.lo.login_success("admin", "admin123")
self.assertFalse(success, "失败")
if __name__ == "__main__":
unittest.main()
login_business.py
# coding=utf-8
from handle.login_handle import LoginHandle
class LoginBusiness(object):
def __init__(self, driver):
self.login_h = LoginHandle(driver)
def user_base(self, username, password):
self.login_h.send_username(username)
self.login_h.send_password(password)
self.login_h.click_login_button()
self.login_h.send_username(chr(127)*int(10))
self.login_h.send_password(chr(127)*int(10))
def login_error(self, username, password):
self.user_base(username, password)
if self.login_h.get_login_text() == '登录':
print("登录失败")
return True
else:
return False
def login_success(self, username, password):
self.user_base(username, password)
if self.login_h.get_login_text() is None:
return True
else:
return False
修改后代码:
test_login.py
# coding=utf-8
# 用例集
import sys
import os
import warnings
from business.login_business import LoginBusiness
import pytest
from base.basepage import DriverUtil
curPath = os.path.abspath(os.path.join(os.getcwd()))
sys.path.append(curPath)
class TestLoginCase():
def setup_class(self):
self.driver = DriverUtil.getWebDriver() # 驱动设置
self.lo = LoginBusiness(self.driver) # 实例化
warnings.simplefilter('ignore', ResourceWarning)
def teardown_class(self):
self.driver.close()
@pytest.mark.demo(order=1)
def test_login_username_error(self):
Text = self.lo.login_error("admin123", "admin123")
assert Text == "用户名或者密码错误"
@pytest.mark.demo(order=2)
def test_login_password_error(self):
Text = self.lo.login_error("admin", "admin")
assert Text == "用户名或者密码错误"
@pytest.mark.demo(order=3)
def test_login_success(self):
Text = self.lo.login_success("admin", "admin123")
assert Text == "超级管理员"
if __name__ == "__main__":
pytest.main()
login_business.py
# coding=utf-8
from handle.login_handle import LoginHandle
class LoginBusiness(object):
def __init__(self, driver):
self.login_h = LoginHandle(driver)
def user_base(self, username, password):
self.login_h.send_username(username)
self.login_h.send_password(password)
self.login_h.click_login_button()
self.login_h.send_username(chr(127)*int(10))
self.login_h.send_password(chr(127)*int(10))
def login_error(self, username, password):
self.user_base(username, password)
ToastText = self.login_h.get_login_fail_text()
return ToastText
def login_success(self, username, password):
self.user_base(username, password)
ButtonText = self.login_h.get_login_user_text()
return ButtonText
总结
推荐大家使用pytest!