美文网首页python
python+unittest自动保存截图

python+unittest自动保存截图

作者: 小迷糊仙 | 来源:发表于2020-09-09 23:26 被阅读0次

    自动化测试过程,针对失败的用例,我们有时候需要保存截图,或者想要在html测试报告中体现截图,如何实现呢?
    这里先说说我的思路:利用webdriver下的截图方法实现自动截图,然后再对该方法进行封装

    首先,selenium中的webdriver提供了三种保存截图的方法

    1、driver.get_screenshot_as_file(filename)

    将截图保存为文件,filename为要保存的文件路径和文件名

    2、driver.get_screenshot_as_base64()

    将截图保存为base64编码格式,供后面html报告中使用

    3、driver.get_screenshot_as_png()

    将截图保存为二进制形式,用到的好像很少

    这里我只针对前两种方法做了实践,直接上代码

    方法一:保存为文件

    • 截图方法代码:
    def save_screen_shot_as_file(self,method_name):
    
    '''这是将截图保存在文件夹中'''
    
        self.img_path =r'C:\Users\PycharmProjects\web自动化\picture'
    
        self.img_name = time.strftime('%Y-%m-%d_%H-%M-%S')+'.png'
    
        self.method_name =method_name
    
        self.driver.get_screenshot_as_file(self.img_path+'\\'+method_name+self.img_name)
    
    • 基类BasePage.py代码:
    #判断是否登陆成功
    def check_login_state(self,*locator):
        try:
            self.driver.find_element(*locator)
            return True
        except Exception as e:
            print("登陆失败:%s" % e)
            #添加失败截图,并保存到一定目录下
            self.test_name = sys._getframe().f_code.co_name  #获取当前调用函数的名字
            GetScreen(self.driver).save_screen_shot_as_file(self.test_name)
    
    • 执行结果:

    方法二:保存为base64编码格式

    • test_login.py代码如下:
    @ddt()
    class TestCase(unittest.TestCase):
    
        @classmethod
        #初始化类
        def setUpClass(cls):
            cls.driver = webdriver.Chrome()
            print("用例开始执行了!")
            cls.driver.get("http://www.xxx.com/")
            # 窗口最大化
            cls.driver.maximize_window()
            # 页面添加加载等待时间
            cls.driver.implicitly_wait(5)
            cls.imgs=[]
    
        @classmethod
        #释放资源类
        def tearDownClass(cls):
            cls.driver.quit()
            print("用例执行完毕,退出浏览器!")
       
        #创建保存图片方法
        def add_img(self):
            self.imgs.append(self.driver.get_screenshot_as_base64())
            return True
    
    
        @data(('15800000001','xxxxxx'))
        @unpack
        def test_1_login(self,username,password):
            t = IndexPage(self.driver)
            #登陆链接
            t.to_login()
            self.driver.implicitly_wait(3)
            #输入登陆信息登陆
            l =LoginPage(self.driver)
            l.login_input(username,password)
            self.add_img()  #保存截图,供测试报告使用
    
    
    • run_case.py文件代码如下:
    class RunSuite():
    
        def run_suite(self):
            # 定义读取测试文件的目录
            test_case_path = r'C:\Users\PycharmProjects\web自动化\TestCase'
            # 定义报告存放目录
            report_path = r'C:\Users\PycharmProjects\web自动化\report'
            report_file = 'report' + time.strftime("%Y-%m-%d_%H_%M_%S") + '.html'
    
            discover = defaultTestLoader.discover(test_case_path, pattern='test*.py')
    
            with open(report_path + '\\' + report_file, 'wb') as f:
                runner = HTMLTestRunner(stream=f, title="网站登陆测试报告", description="登陆用例执行结果", verbosity=1)
                runner.run(discover)
    
    if __name__ == '__main__':
        run = RunSuite()
        run.run_suite()
    
    
    • 执行结果:

    相关文章

      网友评论

        本文标题:python+unittest自动保存截图

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