Selenium+Unittest+HTMLTestRunner框架更改为Selenium+Pytest+Allure(二)

1   代码框架

        整体项目结构如图:

        

    Common:公共库

                

     Logs: 日志目录

     Page: 页面元素

     Report:测试报告

     TestCase:测试用例

     TestData: 测试数据

2   单模块运行

    直接上代码:

    

# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name:     TestJohnDeere.py
   Author :        曾良均
   QQ:             277099728
   Date:          12/1/2023 4:03 PM   
   Description :
-------------------------------------------------
   Change Activity:
                   
-------------------------------------------------
"""
__author__ = 'ljzeng'

import pytest
from Common.logger import Log
from Common.Operator import *
from Common.Logins import Logins
from Page.Credentials.CredentialsPage import CredentialsPage as cp
from selenium.webdriver.common.by import By
import allure

log = Log("TestJohnDeere")


class TestJohnDeere:
    driver = None
    lg = None
    page = None

    coll = (By.XPATH, '//*[@id="nav_arrow"]/div')

    @pytest.fixture()
    def begin(self):
        log.info('--------开始测试John Deere Credentials功能--------')
        self.driver = browser("chrome")
        self.lg = Logins()
        self.lg.login(self.driver, 'atcred@iicon004.com', 'Win.12345')
        self.driver.implicitly_wait(10)

        self.page = cp()
        ac = self.lg.get_attribute(self.coll, 'class')
        while True:
            if ac != 'icn collapse':
                ar = (By.ID, 'nav_arrow')
                self.page.click(ar)
                continue
            else:
                break
        self.lg.click(self.page.johndeere_menu)
        time.sleep(1)
        self.lg.switch_to_iframe(self.page.right_iframe)

        yield self.lg
        self.driver.quit()

    def add_jdlink(self, begin):
        log.info('点击 JD Link 的Add')
        if not begin.is_clickable(self.page.jdlink_add_btn):
            time.sleep(2)
        try:
            begin.click(self.page.jdlink_add_btn)
            time.sleep(1)
            self.driver.switch_to.window(self.driver.window_handles[1])
            time.sleep(2)
            txt = begin.get_text(self.page.jdlink_page_signin_lable)
        except Exception:
            log.info('Add 跳转失败!')
            return False
        else:
            log.info('Add 跳转成功!')
            self.driver.switch_to.window(self.driver.window_handles[0])
            if txt == 'Sign In':
                return True
            else:
                return False

    @allure.feature("测试Credentials功能")
    @allure.story("测试JD Link Credentials设置功能")
    def test_addJDlink(self, begin):
        """测试Add JD Link功能"""
        res = self.add_jdlink(begin)
        if res:
            log.info('Add JD Link 测试成功!')
        else:
            log.info('Add JD Link 测试失败!')
        assert res


if __name__ == '__main__':
    pytest.main(['-vs', 'TestJohnDeere.py'])  # 主函数模式

        pytest.main(['-vs', 'TestJohnDeere.py']) 

        只运行当前文件,执行结果在Pycharm工作台显示。

3   主函数运行指定用例

  3.1  pytest.ini定义要执行的用例文件、类、方法    
[pytest]
addopts=-vs                 
testpaths=./TestCase
python_files=Test*.py
python_classes=Test
python_functions=test
markers=
    smoke:
    uermanage:
  3.2  主函数运行(run.py)

    

# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name:     run.py
   Author :        曾良均
   QQ:             277099728
   Date:          12/4/2023 9:27 AM   
   Description :    这是所有测试用例运行的主函数
-------------------------------------------------
   Change Activity:

-------------------------------------------------
"""
__author__ = 'ljzeng'
import pytest
import os


if __name__ == '__main__':
    pytest.main(['-s', '-q', '--clean-alluredir', '--alluredir=allure-results'])
    os.system(r"copy environment.properties allure-results\\")
    os.system(r"allure generate -c -o Report\allure-report")
    # os.system(r"allure open Report\allure-report")  # 此命令会打开报告

4  查看Allure报告

    通过主函数生成Allure报告文件,命令行打开报告:    

allure open Report\allure-report

  浏览器自动打开报告:

5  遇到的问题

    5.1 allure-results does not exists

    当pytest.main中指定的--alluredir不是allure-results时,后面执行allure generate会把如题错误

解决方法:指定 --alluredir=allure-results 即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/230697.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++学习手札】基于红黑树封装模拟实现map和set

​ 🎬慕斯主页:修仙—别有洞天 💜本文前置知识: 红黑树 ♈️今日夜电波:漂流—菅原纱由理 2:55━━━━━━️💟──────── 4:29 …

学生护眼灯哪个牌子好?适合学生考研用的台灯推荐

不知道各位家长们有没有对孩子的视力健康关注过,如今中国近视的总人数接近6亿人口!而我国儿童青少年近视比率更是超过了一半,达到了52.7%的近视率,也就是说每十个儿童青少年中就有五个是存在视力问题的。其中很大的原因就是长时间…

docker资源限制

目录 系统压力测试工具stress 1. cpu资源限制 1.1 限制CPU Share 1.2 限制CPU 核数 1.3 CPU 绑定 2. mem资源限制 3. 限制IO 二、端口转发 三、容器卷 四、部署centos7容器应用 五、docker数据存储位置 六、docker网络 容器网络分类 在使用 docker 运行容器时&…

办公人员必备简单拉伸操,为了保护自己的颈椎,赶快练起来吧

目录 一、办公人员必备简单拉伸操的必要性 二、教程介绍 第一节:双掌擦颈 第二节:左右转头 第三节:前后点头 第四节:旋肩舒颈 第五节:颈项争力 第六节:头部旋转 第七节:头手相抗 第八…

有一篇文章,共有3行文字,每行有80个字符。要求分别统计其中英文大写字母、小写字母、数字、空格以及其他字符的个数

目录 1解题思路: 2代码: 3运行代码: 4总结: 1解题思路: 有一篇文章,共有3行文字,每行有80个字符。要求分别统计其中英文大写字母、小写字母、数字、空格以及其他字符的个数 首先先设置一个字…

Qt工程文件分离、Qtimer定时器、Qt Creator 常用快捷键

Qt 工程文件分离 不含 UI 的文件分离 以堆栈窗体的代码为例。 firstpagewidget.h #ifndef FIRSTPAGEWIDGET_H #define FIRSTPAGEWIDGET_H#include <QtWidgets> // 记得修改class firstPageWidget : public QWidget {Q_OBJECT public:explicit firstPageWidget(QW…

『Linux升级路』进度条小程序

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、预备知识 &#x1f4d2;1.1缓冲区 &#x1f4d2;1.2回车和换行 二、倒计…

pair的用法,详解

1.pair是什么 pair名为二元组&#xff0c;顾名思义&#xff0c;就是储存二元组的。 2.pair的初始化 pair<第一个值类型, 第二个值类型> pr 第一个值类型&#xff1a;要储存的第一个值的数据类型第二个值类型&#xff1a;要储存的第二个值的数据类型pair<int, int&g…

【数据结构】单调栈与单调队列算法总结

单调栈 知识概览 单调栈最常见的应用是找到每一个数离它最近的且比它小的数。单调栈考虑的方式和双指针类似&#xff0c;都是先想一下暴力做法是什么&#xff0c;然后再挖掘一些性质如单调性&#xff0c;最终可以把目光集中在比较少的状态中&#xff0c;从而达到降低时间复杂…

让聪明的车连接智慧的路,C-V2X开启智慧出行生活

“聪明的车 智慧的路”形容的便是车路协同的智慧交通系统&#xff0c;从具备无钥匙启动&#xff0c;智能辅助驾驶和丰富娱乐影音功能的智能网联汽车&#xff0c;到园区的无人快递配送车&#xff0c;和开放的城市道路上自动驾驶的公交车、出租车&#xff0c;越来越多的车联网应用…

【vSphere | VM】虚拟机自定义规范Ⅲ —— 创建 Linux 虚拟机自定义规范

目录 4. 创建关于Linux系统的虚拟机自定义规范4.1 新建 Linux 虚拟机自定义规范&#xff08;1&#xff09;名称和目标操作系统&#xff08;2&#xff09;计算机名称&#xff08;3&#xff09;时区&#xff08;4&#xff09;自定义脚本&#xff08;5&#xff09;网络&#xff08…

CleanMyMac X清理垃圾软件有哪些功能?2024版本更新啥内容

如今电脑成为大多数人工作的工具&#xff0c;使用得越久就越需要清理垃圾软件。系统垃圾、废纸娄垃圾、大型和旧文件这些通常都占用了我们的电脑几G的空间。 想要清除不必要的垃圾文件&#xff0c;可以使用mac卸载软件CleanMyMac X&#xff0c;这款清理垃圾软件可以智能扫描Ma…

电脑待机怎么设置?让你的电脑更加节能

在日常使用电脑的过程中&#xff0c;合理设置待机模式是一项省电且环保的好习惯。然而&#xff0c;许多用户对于如何设置电脑待机感到困扰。那么电脑待机怎么设置呢&#xff1f;本文将深入探讨三种常用的电脑待机设置方法&#xff0c;通过详细的步骤&#xff0c;帮助用户更好地…

EXP-00056: 遇到 ORACLE 错误 12154 ORA-12154: TNS: 无法解析指定的连接标识符

exp oas/oasoas filed:\daochu.dmp owner(s) 导出特定用户 //exp 用户名/密码数据库 filed:\daochu.dmp owner(用户名) 1.重启oracle监听 cmd 中输入 services.msc 找到服务&#xff1a;OracleOraDb10g_home1TNSListener 与 OracleServiceORCL。 把两个服务启动. 若未解决…

JavaScript 条件语句之switch

if..else虽然有多条路选择&#xff0c;但是代码读起来会很累人&#xff0c;说白了就是使用switch来简化if else表达式。 语法会有switch关键字&#xff0c;case关键字&#xff0c;以及break关键字。需要注意的是&#xff0c;每个case代码块内部的break语句不能少&#xff0c;否…

【抽象策略模式】实践

前言 刚果商城&#xff0c;用户登录 Or 注册 发送邮箱验证码场景&#xff0c;使用抽象策略模式实现 什么是抽象策略模式 抽象策略模式是一种行为型设计模式&#xff0c;它允许定义一系列算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以互相替换。这使得客户端代码…

EMC VNX Unified存储NAS控制台常见问题解答

每次遇到VNX unfied的case就是一坨屎&#xff0c;很多客户根本不理解什么是Unifed storage&#xff0c;EMC的Clariion中端存储系统还分Block和Unified的产品。这个blog就是简单介绍一下VNX Unified存储的管理控制台&#xff0c;英文是 control station, 简称为CS。 顾名思义&a…

Kubernetes集群安装高可用postgresql

Kubernetes集群安装高可用postgresql Bitnami 提供的 postgresql-ha 解决方案是一个预配置的、高可用的 PostgreSQL 集群配置&#xff0c;通常部署在 Kubernetes 环境中。它使用了一些关键技术和组件来实现数据库的高可用性。&#xff0c;Bitnami postgresql-ha 主要采用以下构…

JVM 性能调优及监控诊断工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解

目录 一. 前言 二. jps&#xff08;Java Virtual Machine Process Status Tool&#xff09; 三. jstack 四. jmap&#xff08;Memory Map&#xff09;和 jhat&#xff08;Java Heap Analysis Tool&#xff09; 五. jstat&#xff08;JVM统计监测工具&#xff09; 六. hpro…

云原生的 CI/CD 框架tekton - pipeline(一)

文章目录 1. 官方介绍2. 组件2.1 Tekton Pipelines2.2 部署pipeline2.3 部署dashborad2.3.1 task2.3.2 taskrun2.3.3 Pipeline2.3.4 PipelineRun 3. 案例案例1: 拉取代码并查看readmestep1: 创建task - 拉取代码step2: 创建task - 查看reamdestep3: 创建task的编排 - pipelines…