美文网首页Web测试
SelenIum + python 页面加载速度测试

SelenIum + python 页面加载速度测试

作者: Jeff_9021 | 来源:发表于2019-09-27 12:27 被阅读0次

    # -*- coding: utf-8 -*-

    import unittest

    from selenium import webdriver

    import time

    import json

    class UntitledTestCase(unittest.TestCase):

        def setUp(self):

            Options = webdriver.ChromeOptions()

            Options.add_argument('--headless')

            self.driver = webdriver.Chrome(chrome_options=Options)

            self.driver = webdriver.Chrome()

            self.driver.implicitly_wait(30)

            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 ;

                          """

            # 添加压测网址,在数组汇总添加一个 Dict即可

            self.gather_data_dict_ = [

                {'UrlName': '首页',

                'Url': 'http://zs.cnknowledge.com/',

                'number': 20},

                {'UrlName': '政策法规',

                'Url': 'http://zs.cnknowledge.com/html/policy_Law/law_know.html?parentId=3&type=1',

                'number': 20},

                {'UrlName': '行业新闻',

                'Url': 'http://zs.cnknowledge.com/html/trade_News/news_pages.html?parentId=1&type=2',

                'number': 20},

                {'UrlName': '学术前言',

                'Url': 'http://zs.cnknowledge.com/html/study_Leading/study_news.html?parentId=2&type=3',

                'number': 20},

                {'UrlName': '专题报道',

                'Url': 'http://zs.cnknowledge.com/html/special_report/report_event.html?parentId=4&type=4',

                'number': 20},

                {'UrlName': '名录',

                'Url': 'http://zs.cnknowledge.com/html/list_new/organization.html?parentId=5&type=5',

                'number': 20}

            ]

        def test_untitled_test_case(self):

            # 返回结果

            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 json.dumps(result, encoding='utf-8', ensure_ascii=False)

        def __get_page_load_time_NoCache(self, Url, number=1):

            """

            网页无缓存的情况下进行加载速度测试

            :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)

            return {"页面加载时间": res_page,

                    "DOM加载时间": 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,

                    "DOM加载时间": res_domready}

        def tearDown(self):

            pass

    下面是处理的代码,我没怎么算,就是打印出来写了一个报告。

    # -*- coding: utf-8 -*-

    result = [{'UrlName': 'baidu', 'Url': 'https://www.baidu.com/', 'number': 3,

              'NoCache': {'页面加载时间': {'max': 523, 'min': 284, 'avg': 400.6666666666667},

                          'DOM加载时间': {'max': 439, 'min': 256, 'avg': 348.6666666666667}},

              'Cache': {'页面加载时间': {'max': 131, 'min': 129, 'avg': 130.0},

                        'DOM加载时间': {'max': 101, 'min': 85, 'avg': 94.0}}}]

    for re in result:

        print(re["UrlName"])

        print(re["Url"])

        Cache_page = re["Cache"]['页面加载时间']

        Cache_dom = re["Cache"]['DOM加载时间']

        NoCache_page = re["NoCache"]['页面加载时间']

        NoCache_dom = re["NoCache"]['DOM加载时间']

        print(Cache_page["max"], Cache_page["min"], Cache_page["avg"], Cache_dom["max"], Cache_dom["min"], Cache_dom["avg"])

        print(NoCache_page["max"], NoCache_page["min"], NoCache_page["avg"], NoCache_dom["max"], NoCache_dom["min"],

              NoCache_dom["avg"])

    参考资料:

    https://blog.csdn.net/weixin_43664254/article/details/90718789

    相关文章

      网友评论

        本文标题:SelenIum + python 页面加载速度测试

        本文链接:https://www.haomeiwen.com/subject/xqvhyctx.html