tesgsdfsgfd/test_repo_issue_flow.py

201 lines
11 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
# @Time : 2023/10/31 14:39
# @Author : floraachy
# @File : test_repo_issue_flow.py
# @Software: PyCharm
# @Desc:
# 标准库导入
import os
import re
# 第三方库导入
import allure
import pytest
from playwright.sync_api import BrowserContext
from loguru import logger
# 本地应用/模块导入
from config.path_config import FILES_DIR
from page_objects.projects.issue.repo_issue_page import RepoIssuePage
from page_objects.projects.issue.repo_new_issue_page import RepoNewIssuePage
from page_objects.projects.issue.repo_issue_detail_page import RepoIssueDetailPage
from page_objects.projects.issue.repo_edit_issue_page import RepoEditIssuePage
from utils.requests_utils.api_workflow import get_api_data, api_work_flow
from config.path_config import INTERFACE_DIR
from config.global_vars import GLOBAL_VARS
@pytest.mark.issue
class TestRepoIssueFlow:
"""疑修"""
cases = {
"test_new_search_edit_delete_issue": [
{"issue_title": "new - ${generate_paragraph(nb=1)}",
"issue_desc": "${generate_paragraph()}",
"issue_file": " gitlinklogo2.png, gitlinklogo3.jpg",
"new_issue_success_message": "疑修创建成功!",
"edit_issue_title": "update - ${generate_paragraph(nb=1)}",
"edit_issue_desc": "${generate_paragraph()}",
"delete_issue_file": "gitlinklogo3.jpg",
"file_delete_success_message": "附件删除成功",
"update_issue_success_message": "疑修更新成功!",
"delete_issue_confirm_message": "您确定要删除当前疑修?",
"delete_issue_success_message": "疑修删除成功!",
"run": True}],
"test_search_copy_delete_issue": [
{"new_issue_file": "导入TOC订单.xls, login_demo.yaml",
"copy_issue_title": "update - ${generate_paragraph(nb=1)}",
"copy_issue_desc": "${generate_paragraph()}",
"copy_issue_file": " gitlinklogo2.png, gitlinklogo3.jpg",
"copy_issue_success_message": " 疑修复制成功!",
"delete_issue_confirm_message": "您确定要删除当前疑修?",
"delete_issue_success_message": "疑修删除成功!",
"run": True}]
}
@pytest.fixture(autouse=True)
def start_for_each(self, request, default_user_context: BrowserContext):
logger.info("for each--start: 测试用户打开新建疑修页面")
# 测试用户
user_page = default_user_context.new_page()
self.create_issue_page = RepoNewIssuePage(user_page)
yield
logger.info("for each--end: 后置操作")
@pytest.mark.parametrize("case")
def test_new_issue_success(self, case):
"""
登录 --> 新建疑修 --> 删除疑修
"""
# 进入疑修创建页面
self.create_issue_page.navigate(repo_owner=GLOBAL_VARS.get("repo_owner"),
repo_identifier=GLOBAL_VARS.get("repo_identifier"))
issue_title = case.get("issue_title")
issue_desc = case.get("issue_desc")
# 兼容一下中文逗号,发现有中文逗号,替换为英文逗号, 同时去除file前后空格与保存文件的目录拼接出文件的绝对路径
issue_files = [os.path.join(FILES_DIR, f.strip()) for f in
case.get("issue_file").replace("", ",").split(",")]
# 创建疑修
self.create_issue_page.new_issue_flow(issue_title=issue_title, issue_desc=issue_desc, issue_file=issue_files,
success_message=case.get("new_issue_success_message"))
#
# issue_page = RepoIssuePage(self.create_issue_page.page)
#
# # 点击【疑修(Issue)】导航栏
# issue_page.click_issue_nav()
# # 页面进入:${repo_owner}/${repo_identifier}/issues
# issue_page.have_url(
# f"{GLOBAL_VARS.get('repo_owner')}/{GLOBAL_VARS.get('repo_identifier')}/issues")
# # 在搜索框中输入疑修标题,点击搜索图标
# issue_page.search_issue_by_keyword(text=issue_title)
# # 点击疑修标题
# issue_page.click_issue_title_on_list(title=issue_title)
# # 断言 - 页面进入疑修详情页, 检查网页标题,疑修标题,内容及附件
# expected_issue_title = issue_title
# # 断言 - 网页标题模糊匹配expected['issue_title']-疑修
# issue_page.have_title(re.compile(f"{expected_issue_title}-疑修-.*"))
# # 断言 - 疑修标题,内容及附件
# expected_issue_file = issue_files if isinstance(issue_files, list) else [issue_files]
# expect_files = []
# for issue_file in expected_issue_file:
# expect_files.append(os.path.basename(issue_file) if os.path.isabs(issue_file) else issue_file)
# RepoIssueDetailPage(issue_page.page).assert_issue_title_desc_attachment(expect_tittle=issue_title,
# expect_desc=issue_desc,
# expect_attachment=expect_files)
#
# edit_issue_title = case.get("edit_issue_title")
# edit_issue_desc = case.get("edit_issue_desc")
# # 检查一下需要删除的附件是否传递错误
# # 兼容一下中文逗号,发现有中文逗号,替换为英文逗号, 同时去除file前后空格与保存文件的目录拼接出文件的绝对路径
# delete_issue_files = [os.path.join(FILES_DIR, f.strip()) for f in
# case.get("delete_issue_file").replace("", ",").split(",")]
# logger.error(f"编辑疑修时,需要删除的疑修附件不是疑修有的附件:{delete_issue_files}")
#
# # 编辑疑修
# edit_issue_page = RepoEditIssuePage(issue_page.page)
# edit_issue_page.edit_issue_flow(issue_title=edit_issue_title, issue_desc=edit_issue_desc,
# delete_issue_file=delete_issue_files,
# success_message=case.get("update_issue_success_message"))
# # 断言 - 页面进入疑修详情页, 检查网页标题,疑修标题,内容及附件
# # 断言网页标题模糊匹配expected['issue_title']-疑修
# edit_issue_page.have_title(re.compile(f"{edit_issue_title}-疑修-.*"))
# # 断言 - 疑修标题,内容及附件
# expected_issue_file = list(set(issue_files) - set(delete_issue_files))
# expect_files = []
# for issue_file in expected_issue_file:
# expect_files.append(os.path.basename(issue_file) if os.path.isabs(issue_file) else issue_file)
#
# edit_issue_page.assert_issue_title_desc_attachment(expect_tittle=edit_issue_title,
# expect_desc=edit_issue_desc,
# expect_attachment=expect_files)
# 删除疑修
RepoIssuePage(page).delete_issue(confirm_message=case.get("delete_issue_confirm_message"),
success_message=case.get("delete_issue_success_message"))
@pytest.mark.parametrize("case")
def test_search_copy_delete_issue(self, page: Page, case):
"""
前提条件:当前存在一个疑修
1. 登录
2. 访问仓库的疑修详情页
3. 复制疑修
4. 删除刚刚复制的疑修
"""
# 我有一个疑修,疑修带有附件,附件名称是
# 通过接口登录获取登录cookies
if not GLOBAL_VARS.get("cookies"):
login_api = get_api_data(api_file_path=os.path.join(INTERFACE_DIR, "test_gitlink_login.yaml"),
key="gitlink_login_01")
res = api_work_flow(req_data=login_api, source=GLOBAL_VARS)
login_cookies = res["cookies"]
GLOBAL_VARS["cookies"] = login_cookies
# 上传附件获取附件id
issue_files = [f.strip() for f in case.get("new_issue_file").replace("", ",").split(",")]
GLOBAL_VARS["attachment_ids"] = []
for file in issue_files:
GLOBAL_VARS["file_name"] = file
upload_file_api = get_api_data(
api_file_path=os.path.join(INTERFACE_DIR, "projects", "test_gitlink_upload_files.yaml"),
key="gitlink_upload_file_01")
res = api_work_flow(req_data=upload_file_api, source=GLOBAL_VARS)
GLOBAL_VARS["attachment_ids"].append(res["attachment_id"])
# 新建疑修
new_issue_api = get_api_data(
api_file_path=os.path.join(INTERFACE_DIR, "projects", "issues", "test_gitlink_repo_new_issue.yaml"),
key="gitlink_repo_new_issue_01")
res = api_work_flow(req_data=new_issue_api, source=GLOBAL_VARS)
# 访问疑修详情页
issue_index = res["issue_index"]
CommonPage(page).navigate(
f"{GLOBAL_VARS.get('repo_owner')}/{GLOBAL_VARS.get('repo_identifier')}/issues/{issue_index}")
issue_title = case.get("copy_issue_title")
issue_desc = case.get("copy_issue_desc")
# 兼容一下中文逗号,发现有中文逗号,替换为英文逗号, 同时去除file前后空格与保存文件的目录拼接出文件的绝对路径
issue_files = [os.path.join(FILES_DIR, f.strip()) for f in
case.get("copy_issue_file").replace("", ",").split(",")]
# 复制疑修
RepoIssuePage(page).copy_issue(issue_title=issue_title, issue_desc=issue_desc, issue_file=issue_files,
success_message=case.get("copy_issue_success_message"))
# 断言 - 页面进入疑修详情页, 检查网页标题,疑修标题,内容及附件
# 断言网页标题模糊匹配expected['issue_title']-疑修
CommonPage(page).assert_page_title(re.compile(f"{issue_title}-疑修-.*"))
# 断言 - 疑修标题,内容及附件
expected_issue_file = issue_files if isinstance(issue_files, list) else [issue_files]
expect_files = []
for issue_file in expected_issue_file:
expect_files.append(os.path.basename(issue_file) if os.path.isabs(issue_file) else issue_file)
RepoIssuePage(page).assert_issue_title_desc_attachment(expect_tittle=issue_title, expect_desc=issue_desc,
expect_attachment=expect_files)
RepoIssuePage(page).assert_issue_attachments(expect_files)
# 删除疑修
RepoIssuePage(page).delete_issue(confirm_message=case.get("delete_issue_confirm_message"),
success_message=case.get("delete_issue_success_message"))