结合单元测试框架unittest,直接贴代码: # -*- coding: utf-8 -*- import unittest from selenium import webdriver #from object.DRIVER import getDriver import time,queue import login_page,BasePage class UntitledTestCase(unittest.TestCase): def setUp(self): #Options = webdriver.Firefox() #Options.add_argument('--headless') # self.driver = webdriver.Chrome(chrome_options=Options) self.q = queue.Queue() self.driver = webdriver.Firefox() #self.driver = getDriver() self.verificationErrors = [] self.accept_next_alert = True self.img = """ // 首屏图片加载完成 let mytiming = window.performance.timing; return window.lastImgLoadTime - mytiming.navigationStart ; """ self.intfaces = """ https://blog.csdn.net/weixin_42284354/article/details/80416157 // 接口完成加载完成 let mytiming = window.performance.timing; return Report.SPEED.LASTCGI - mytiming.navigationStart ; """ self.DNS = """ // DNS查询耗时 let mytiming = window.performance.timing; return mytiming.domainLookupEnd - mytiming.domainLookupStart ; """ self.TCP = """ // TCP链接耗时 let mytiming = window.performance.timing; return mytiming.connectEnd - mytiming.connectStart ; """ self.request = """ // request请求耗时 let mytiming = window.performance.timing; return mytiming.responseEnd - mytiming.responseStart ; """ self.dom = """ // 解析dom树耗时 let mytiming = window.performance.timing; return mytiming.domComplete - mytiming.domInteractive ; """ self.Ari = """ // 白屏时间 let mytiming = window.performance.timing; return mytiming.responseStart - mytiming.navigationStart ; """ self.domready = """ // domready时间 let mytiming = window.performance.timing; return mytiming.domContentLoadedEventEnd - mytiming.fetchStart ; """ self.loadEventTime = """ let mytiming = window.performance.timing; return mytiming.loadEventEnd - mytiming.navigationStart ; """ ''' self.gather_data_dict = [ {'UrlName': '简化平台', 'Url': 'http://39.98.160.184:9999/', 'number': 3} ] ''' # 添加压测网址,在数组汇总添加一个 Dict即可 self.gather_data_dict_ = [ {'UrlName': '首页', 'Url': 'http://39.98.160.184:9999/Manager/default.aspx', 'number': 3}, {'UrlName': '用户列表', 'Url': 'http://39.98.160.184:9999/Manager/Module/tb_User/UserDefault.aspx', 'number': 3}, {'UrlName': '群组列表', 'Url': 'http://39.98.160.184:9999/Manager/Module/tb_ChatGroup/Default.aspx', 'number': 3} ] def test_untitled_test_case(self): self.driver.implicitly_wait(30) # 返回结果 result = [] # 读取压测数数据,返回加载结果! for data in self.gather_data_dict_: result_temp = { "UrlName": data["UrlName"], "Url": data["Url"], "number": data["number"], "NoCache": self.__get_page_load_time_NoCache(data['Url'], data['number']), #"Cache": self.__get_page_load_time_Cache(data['Url'], data['number']) } result.append(result_temp) print(result) def __get_page_load_time_NoCache(self, Url, number): """ 网页无缓存的情况下进行加载速度测试 :param Url: 加载的网址 :param number: 加载次数 :return: """ driver = self.driver login_url = 'http://39.98.160.184:9999/' driver.get(login_url) self.login_page = login_page.LoginPage(self.driver) self.login_page.input_name("dlswxw") self.login_page.input_pwd("12") self.login_page.login_click() self.basepage = BasePage.BasePage(self.driver) if self.basepage.isElementExist('huanying'): self.__get_page_load_time_NoCache_res(Url, number) self.login_page.logout_click() return self.q.get() else: self.login_page.comfir_login() self.__get_page_load_time_NoCache_res(Url, number) self.login_page.logout_click() return self.q.get() def __get_page_load_time_NoCache_res(self, Url, number): """ 网页无缓存的情况下进行加载速度测试 :param Url: 加载的网址 :param number: 加载次数 :return: """ driver = self.driver page = [] domready = [] res_page = {} res_domready = {} for i in range(number): # 调用浏览器打开一个新窗口 driver.execute_script("window.open('','_blank');") # 窗口定位到新打开的窗口 driver.switch_to.window(driver.window_handles[-1]) driver.get(Url) page.append(int(driver.execute_script(self.loadEventTime))) domready.append(int(driver.execute_script(self.domready))) time.sleep(0.5) # 关闭窗口 driver.execute_script("window.close();") # 窗口定位返回旧窗口 driver.switch_to.window(driver.window_handles[-1]) res_page['max'] = max(page) res_page['min'] = min(page) res_page['avg'] = sum(page) / len(page) #print(res_page) res_domready['max'] = max(domready) res_domready['min'] = min(domready) res_domready['avg'] = sum(domready) / len(domready) #print(res_domready) self.q.put({"res_page": res_page, "res_domready": res_domready}) def __get_page_load_time_Cache(self, Url, number=5): """ 网页有缓存的情况下进行加载速度测试 :param Url: 加载的网址 :param number: 加载次数 :return: """ driver = self.driver page = [] domready = [] res_page = {} res_domready = {} driver.get(Url) for i in range(number): driver.get(Url) page.append(int(driver.execute_script(self.loadEventTime))) domready.append(int(driver.execute_script(self.domready))) res_page['max'] = max(page) res_page['min'] = min(page) res_page['avg'] = sum(page) / len(page) res_domready['max'] = max(domready) res_domready['min'] = min(domready) res_domready['avg'] = sum(domready) / len(domready) return {"res_page": res_page, "res_domready": res_domready} def tearDown(self): self.driver.quit() login_page :
import os from BasePage import BasePage #logger = Logger("loginpage").getlog() # 加日志的 class LoginPage(BasePage): # 一定要继承这几个类 ''' 加载页面元素位置 global element, dir dir = os.path.abspath('.').split('src')[0] readelements = ReadExcle(dir + "/PageElements/user.xls") # 表名 element, listjs = readelements.get('login') # sheetname 页面操作,调用了basepage里边的方法 ''' def input_name(self, text): # 输入用户名 self.input('LoginName', text) # 需要调用数据库里的参数 def input_pwd(self, text): # 输入密码 self.input('LoginPass', text) def login_click(self): # 点击登陆 self.click('Button1') def comfir_login(self): #点击强制登录 self.click('Message_Button1') def logout_click(self): #点击退出 self.click('Span2')