网站改版要重新备案WordPress的好处
Unittest框架
Unittest框架:框架=测试模块+测试管理模块+测试统计模块,python的内置模块
 import unittest
 Unittest框架四大组件:
 1、TestCase 测试用例
 2.TestFixture 测试用例夹具 测试用例需要执行的前置和后置
 3.TestSuite 测试套件 把需要执行的测试用例汇总在一起
 4、TestRunner 测试运行 执行测试用例
Test Case 测试用例
规则:
1、用例类必须继承Unittest.TestCase,并且以test开头
 2、测试方法,都必须以test_开头
 3、用例执行的顺序按照ASCII
 0.9 a-z A-Z 顺序来执行用例
 unittest也可以通过会令运行
 命令执行TestShopnc类下的所有用例:python -m unittest 用例文件名.用例类名
执行某一条用例:python -m unittest 用例文件名.用例类.用例名称
import time
import  unittest
from selenium import  webdriver
from selenium.webdriver.support.wait import  WebDriverWait
from selenium.webdriver.common.by import  By
from selenium.webdriver.support import  expected_conditions as EC
class TestShopnc(unittest.TestCase):#每个用例前执行 有多少用例就执行多少次def setUp(self) -> None:print("01 每个用例前执行 有多少用例就执行多少次")#每个类之前执行 只执行一次@classmethoddef setUpClass(cls) :print("02 每个类之前执行 只执行一次")#每个用例执行之后执行 有多少用例就执行多少次def tearDown(self) -> None:print("03 每个用例执行之后执行 有多少用例就执行多少次")@classmethod#每个类之后执行 只执行一次def tearDownClass(cls) -> None:print("04 每个类之后执行 只执行一次")def test_01_login(self):print("用例1")def test_02_shopping(self):print("用例2")def test_03_add_cart(self):print("用例3")def test_04_payment(self):print("用例4")if __name__ == '__main__':i=10print(i)suite=unittest.TestSuite()#添加一个测试用例suite.addTest(TestShopnc(methodName='test_01_login'))#添加多个suite.addTests([TestShopnc("test_02_shopping"),TestShopnc("test_04_payment")])unittest.main(defaultTest="suite")#用例加载器suite2 = unittest.TestSuite()case2=unittest.TestLoader().loadTestsFromTestCase(TestShopnc)suite2.addTests(case2)unittest.TextTestRunner().run(suite2)suite3 = unittest.TestSuite()#查找test开始的py文件case3= unittest.defaultTestLoader.discover("test*.py")suite3.addTests(case3)unittest.main(defaultTest="suite3")
 
问题:如果使用了TestSuite 运行py 文件时还是执行了所有测试用例
 解决方案:

 
 
 
 
 注意:不用在文件中点击,运行,这种方式执行还是会执行所有测试用例 原因:没有执行if name == ‘main’: 中的代码
用例状态:
 . 成功
 E 用例异常
 F 用例执行失败
登录京东&搜索商品&加入购物车
 登录 需要滑块验证 采取手动方式
import time
import  unittest
from selenium import  webdriver
from selenium.webdriver.support.wait import  WebDriverWait
from selenium.webdriver.common.by import  By
from selenium.webdriver.support import  expected_conditions as EC
from DrissionPage import  WebPage
from  DrissionPage.common import By as DBylogin_name = "账户"
pwd = "密码"
js_txt='''var list=$('.p-o-btn.addcart').filter(function(index, element) {return $(this).attr('class').indexOf('disabled')==-1});if(list.length>0){list[0].click();}'''
class TestShopnc(unittest.TestCase):#每个用例前执行 有多少用例就执行多少次def setUp(self) -> None:print("01 每个用例前执行 有多少用例就执行多少次")#每个类之前执行 只执行一次@classmethoddef setUpClass(cls) :cls.web_driver=webdriver.Firefox()cls.web_page=WebPage("d")print("02 每个类之前执行 只执行一次")#每个用例执行之后执行 有多少用例就执行多少次def tearDown(self) -> None:print("03 每个用例执行之后执行 有多少用例就执行多少次")@classmethod#每个类之后执行 只执行一次def tearDownClass(cls):cls.web_driver.quit()cls.web_page.quit()print("04 每个类之后执行 只执行一次")# selenuim demo 开始def test_01_login(self):url="https://passport.jd.com/new/login.aspx"self.web_driver.get("https://passport.jd.com/new/login.aspx")el=(By.ID,"loginname")WebDriverWait(self.web_driver,10).until(EC.presence_of_element_located(el))self.web_driver.find_element(*el).send_keys(login_name)el = (By.ID, "nloginpwd")WebDriverWait(self.web_driver, 10).until(EC.presence_of_element_located(el))self.web_driver.find_element(*el).send_keys(pwd)el = (By.ID, "loginsubmit")WebDriverWait(self.web_driver, 10).until(EC.presence_of_element_located(el))self.web_driver.find_element(*el).click()# 需要滑块验证,采取手动time.sleep(15)print(self.web_driver.current_url)if 'https://aq.jd.com/certified/index' in self.web_driver.current_url:time.sleep(3)#验证按钮self.web_driver.execute_script('$(".btn-def.btn-xl.mb20").click()')time.sleep(3)#发送短信按钮self.web_driver.execute_script('$(".btn-def.btn-msg.btn-l").click()')time.sleep(10)#提交验证self.web_driver.execute_script('$(".btn-primary.btn-m").click()')time.sleep(30)def test_02_shopping(self):#keyif 'https://www.jd.com'  not in self.web_driver.current_url:self.web_driver.get("https://www.jd.com")el=(By.ID,"key")WebDriverWait(self.web_driver, 10).until(EC.presence_of_element_located(el))self.web_driver.find_element(*el).send_keys("三只松鼠大礼包")time.sleep(5)#//*[@id="search"]/div/div[2]/buttonel = (By.XPATH, '//*[@id="search"]/div/div[2]/button')WebDriverWait(self.web_driver, 10).until(EC.presence_of_element_located(el))self.web_driver.find_element(*el).click()time.sleep(5)def test_03_add_cart(self):time.sleep(5)self.web_driver.execute_script(js_txt)# el=(By.XPATH,'/html/body/div[5]/div[2]/div[2]/div[1]/div/div[2]/ul/li[5]/div/div[7]/a[3]')# WebDriverWait(self.web_driver, 10).until(EC.presence_of_element_located(el))# self.web_driver.find_element(*el).click()time.sleep(20)#selenuim demo 结束#drissionpage demo 开始def test_04_login(self):self.web_page.get("https://passport.jd.com/new/login.aspx")el=(DBy.ID,"loginname")self.web_page.wait.eles_loaded(el)self.web_page.ele(el).clear()print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1")self.web_page.ele(el).input(login_name)print("2222222222222222222222222222222222")el = (DBy.ID, "nloginpwd")self.web_page.wait.eles_loaded(el)self.web_page.ele(el).input(pwd)el = (DBy.ID, "loginsubmit")self.web_page.wait.eles_loaded(el)self.web_page.ele(el).click()# 需要滑块验证,采取手动time.sleep(15)print(self.web_page.url)if 'https://aq.jd.com/certified/index' in self.web_page.url:time.sleep(3)#验证按钮self.web_page.run_js('$(".btn-def.btn-xl.mb20").click()')time.sleep(3)#发送短信按钮self.web_page.run_js('$(".btn-def.btn-msg.btn-l").click()')time.sleep(10)#提交验证self.web_page.run_js('$(".btn-primary.btn-m").click()')time.sleep(30)def test_05_shopping(self):#keyif 'https://www.jd.com'  not in self.web_page.url:self.web_page.get("https://www.jd.com")el=(DBy.ID,"key")self.web_page.wait.eles_loaded(el)self.web_page.ele(el).input("麻辣王子")time.sleep(5)el = (DBy.XPATH, '//*[@id="search"]/div/div[2]/button')self.web_page.wait.eles_loaded(el)self.web_page.ele(el).click()time.sleep(5)def test_06_add_cart(self):time.sleep(5)self.web_page.run_js(js_txt)time.sleep(10)#drissionpage demo 结束
