阳洁
2023-07-17 84d824ab75d547484a11633c23d217f0deba4e92
测评系统自动测试
5个文件已添加
5个文件已修改
1 文件已重命名
1个文件已删除
761 ■■■■ 已修改文件
data/test_data.json 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
elements/jaq_answer_elements.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
elements/maq_answer_elements.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/answer_page.py 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/jaq_answer_page.py 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/maq_answer_page.py 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/test_package_list_page.py 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
report/report.html 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
testcase/conftest.py 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
testcase/test_jaq.py 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
testcase/test_maq.py 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/test_data.json
New file
@@ -0,0 +1,49 @@
{
  "login": {
    "url": "http://161.117.57.194/login?lang=zh_CN",
    "username": "admin",
    "password": "ots@2021!!",
    "code": "ots"
  },
  "MAQ": {
    "menu": "测试包管理/测试包列表",
    "add": {
      "company": "TAI测试",
      "type": "人格测试包",
      "product": "MAQV2",
      "hrEmail": "2077506045@qq.com",
      "invalid": "2024-01-01 00:00:00",
      "memberLang": "中文",
      "hrReportLang": "中文",
      "reportTemplate": "MAQV2-Complete-Chinese",
      "memberReportLang": "中文"
    },
    "info": {
      "position":"职员",
      "dept": "人事部"
    }
  },
  "JAQ": {
    "menu": "测试包管理/测试包列表",
    "add": {
      "company": "TAI测试",
      "type": "工作分析包",
      "product": "JAQ",
      "hrEmail": "2077506045@qq.com",
      "invalid": "2024-01-01 00:00:00",
      "memberLang": "中文",
      "hrReportLang": "中文",
      "reportTemplate": "JAQ-Complete-Chinese",
      "memberReportLang": "中文",
      "position": "主管",
      "professionalCategory": "管理",
      "superiorPosition": "总经理"
    },
    "info": {
      "position":"职员",
      "dept": "人事部"
    }
  }
}
elements/jaq_answer_elements.py
New file
@@ -0,0 +1,25 @@
from selenium.webdriver.common.by import By
class JAQAnswerElements:
    # 开始测试按钮
    start_btn = (By.XPATH, "//button/span[text()='开始测试']/..")
    # 题目选项-a
    options_a = (By.XPATH, "//div[@class='el-card__body']/div[1]//span[@class='q-item-span-content']")
    # 题目选项-b
    options_b = (By.XPATH, "//div[@class='el-card__body']/div[2]//span[@class='q-item-span-content']")
    # 禁用的选项
    disabled = (By.XPATH, "//label[@aria-disabled='true']")
    # 继续测试按钮
    continue_testing_btn = (By.XPATH, "//button/span[text()='继续测试']")
    # 提交按钮
    submit_btn = (By.XPATH, "//button/span[contains(text(),'提交')]/..")
    # 上传成功标题
    upload_success_title = (By.XPATH, "//main/h2[contains(text(), '数据已经成功地上传至服务器')]")
    # 加载框文字
    loading_text = (By.XPATH, "//div[@class='el-loading-spinner']/p")
    # 标题文字
    title = (By.XPATH, "//h1[text()='JAQ']")
elements/maq_answer_elements.py
File was renamed from elements/answer_elements.py
@@ -1,7 +1,9 @@
from selenium.webdriver.common.by import By
class AnswerElements:
class MAQAnswerElements:
    # 开始测试按钮
    start_btn = (By.XPATH, "//button")
    # 题目选项
    options = (By.XPATH, "//span[@class='q-item-span-content']")
    # 禁用的选项
@@ -9,7 +11,7 @@
    # 继续测试按钮
    continue_testing_btn = (By.XPATH, "//button/span[text()='继续测试']")
    # 提交按钮
    submit_btn = (By.XPATH, "//button/span[contains(text(),'提交')]")
    submit_btn = (By.XPATH, "//button/span[contains(text(),'提交')]/..")
    # 上传成功标题
    upload_success_title = (By.XPATH, "//main/h2[contains(text(), '数据已经成功地上传至服务器')]")
main.py
@@ -5,7 +5,7 @@
def run_testcases():
    pytest.main(['-vs', '--html=report/report.html', 'testcase/'])
    pytest.main(['-vs', '--html=report/report.html', 'testcase'])
if __name__ == '__main__':
po/answer_page.py
File was deleted
po/jaq_answer_page.py
New file
@@ -0,0 +1,123 @@
import random
from base.base_page import BasePage
from elements.jaq_answer_elements import JAQAnswerElements as Answer
from selenium.common.exceptions import *
import time
class JAQAnswerPage(BasePage):
    """
    答题页面
    """
    loading_count = 0
    def answer_MAQ(self):
        # 暂停3秒
        time.sleep(3)
        while True:
            # 标题不存在直接返回False
            if not self.title_is_display():
                return False
            try:
                # 获取到所有a选项
                options_a = self.get_elements(Answer.options_a)
                if len(options_a) < 5:
                    continue
                number_a = random.randint(0, 4)
                options_a[number_a].click()
                # 获取到所有b选项
                options_b = self.get_elements(Answer.options_b)
                if len(options_b) < 4:
                    continue
                number_b = random.randint(0, 3)
                options_b[number_b].click()
            except:
                pass
            # 提交按钮存在则点击
            if self.submit_btn_is_display():
                self.click(Answer.submit_btn)
                # 数据是否上传完成
                time.sleep(15)
                if self.upload_is_success():
                    return True
                return False
    def upload_is_success(self):
        """
        判断数据是否上传完成
        :return:
        """
        try:
            self.get_element_wait(Answer.upload_success_title)
            return True
        except TimeoutException:
            return False
    def submit_btn_is_display(self):
        """
        判断提交按钮是否存在
        :return:
        """
        try:
            button = self.get_element(Answer.submit_btn)
            if button.is_enabled():
                return True
            else:
                return False
        except NoSuchElementException:
            return False
    def continue_btn_is_display(self):
        """
        判断继续测试按钮是否出现
        :return: bool
        """
        try:
            # 点击继续测试按钮
            button = self.get_element(Answer.continue_testing_btn)
            if button.is_enabled():
                return True
            else:
                return False
        except NoSuchElementException:
            return False
    def title_is_display(self):
        """
        判断标题是否出现
        :return: bool
        """
        try:
            # 获取标题
            self.get_element_wait(Answer.title)
            return True
        except TimeoutException:
            return False
    def loadin_text(self):
        """
        判断加载框加载,如果加载超过10秒直接退出当前测试
        :return:
        """
        i = 0
        while i < 10:
            try:
                self.get_element(Answer.loading_text)
                i += 1
                time.sleep(1)
            except:
                return False
        else:
            return True
    def start_btn(self):
        """
        开始测试按钮
        :return:
        """
        self.click_wait(Answer.start_btn)
po/maq_answer_page.py
New file
@@ -0,0 +1,121 @@
import random
from base.base_page import BasePage
from elements.maq_answer_elements import MAQAnswerElements as Answer
from selenium.common.exceptions import *
import time
class MAQAnswerPage(BasePage):
    """
    答题页面
    """
    loading_count = 0
    def answer_MAQ(self):
        # 暂停3秒
        time.sleep(3)
        while True:
            # 继续测试按钮出现则点击
            if self.continue_btn_is_display():
                self.click(Answer.continue_testing_btn)
            # 标题不存在直接返回False
            if not self.title_is_display():
                return False
            try:
                # 获取到所有选项
                options = self.get_elements(Answer.options)
                if len(options) < 6:
                    continue
                number = random.randint(0, 5)
                if options[number].is_enabled():
                    options[number].click()
            except:
                pass
            # 提交按钮存在则点击
            if self.submit_btn_is_display():
                self.click(Answer.submit_btn)
                # 数据是否上传完成
                time.sleep(15)
                if self.upload_is_success():
                    return True
                return False
    def upload_is_success(self):
        """
        判断数据是否上传完成
        :return:
        """
        try:
            self.get_element_wait(Answer.upload_success_title)
            return True
        except TimeoutException:
            return False
    def submit_btn_is_display(self):
        """
        判断提交按钮是否存在
        :return:
        """
        try:
            button = self.get_element(Answer.submit_btn)
            if button.is_enabled():
                return True
            else:
                return False
        except NoSuchElementException:
            return False
    def continue_btn_is_display(self):
        """
        判断继续测试按钮是否出现
        :return: bool
        """
        try:
            # 点击继续测试按钮
            button = self.get_element(Answer.continue_testing_btn)
            if button.is_enabled():
                return True
            else:
                return False
        except NoSuchElementException:
            return False
    def title_is_display(self):
        """
        判断标题是否出现
        :return: bool
        """
        try:
            # 获取标题
            self.get_element_wait(Answer.title)
            return True
        except TimeoutException:
            return False
    def loadin_text(self):
        """
        判断加载框加载,如果加载超过10秒直接退出当前测试
        :return:
        """
        i = 0
        while i < 10:
            try:
                self.get_element(Answer.loading_text)
                i += 1
                time.sleep(1)
            except:
                return False
        else:
            return True
    def start_btn(self):
        """
        开始测试按钮
        :return:
        """
        self.click_wait(Answer.start_btn)
po/test_package_list_page.py
@@ -23,7 +23,7 @@
        点击创建按钮
        :return:
        """
        self.click(PackageList.create_btn)
        self.click_wait(PackageList.create_btn)
        # 切换到add窗口的iframe
        self.switch_iframe(PackageList.add_iframe)
@@ -33,7 +33,7 @@
        :return:
        """
        # 点击删除按钮
        self.click(PackageList.delete_btn)
        self.click_wait(PackageList.delete_btn)
        # 点击确认按钮
        self.click_wait(PackageList.delete_confirm_btn)
@@ -43,7 +43,7 @@
        :param testPackageName: 测试包名称
        :return:
        """
        self.send_text(testPackageName, PackageList.add_testPackageName_input)
        self.send_text_wait(testPackageName, PackageList.add_testPackageName_input)
    def reportCompanyName_input(self, reportCompanyName):
        """
@@ -51,7 +51,7 @@
        :param reportCompanyName: 报告企业名称
        :return:
        """
        self.send_text(reportCompanyName, PackageList.add_reportCompanyName_input)
        self.send_text_wait(reportCompanyName, PackageList.add_reportCompanyName_input)
    def testPackageType_select(self, testPackageType):
        """
@@ -60,9 +60,9 @@
        :return:
        """
        # 点击下拉框
        self.click(PackageList.add_testPackageType_select)
        self.click_wait(PackageList.add_testPackageType_select)
        # 获取所有选项
        options = self.get_elements(PackageList.add_testPackageType_option)
        options = self.get_elements_wait(PackageList.add_testPackageType_option)
        # 判断选项是否与传入的选项相等
        for opt in options:
            if opt.text == testPackageType:
@@ -77,12 +77,12 @@
        :return:
        """
        # 点击查询按钮
        self.click(PackageList.add_prodTree_btn)
        self.click_wait(PackageList.add_prodTree_btn)
        # 切换到prodTree的iframe
        self.switch_iframe_wait(PackageList.prodTree_iframe)
        time.sleep(2)
        # 获取所有选项
        options = self.get_elements(PackageList.prodTree_option)
        options = self.get_elements_wait(PackageList.prodTree_option)
        # 判断选项是否与传入选项相等
        for opt in options:
            if opt.text == prodName:
@@ -91,7 +91,7 @@
        # 切换到上一层的iframe
        self.switch_parent_iframe()
        # 点击确认按钮
        self.click(PackageList.prodTree_confirm_btn)
        self.click_wait(PackageList.prodTree_confirm_btn)
    def hrReportEmail_input(self, hr_email):
        """
@@ -99,7 +99,7 @@
        :param hr_email:
        :return:
        """
        self.send_text(hr_email, PackageList.add_hrEmail_input)
        self.send_text_wait(hr_email, PackageList.add_hrEmail_input)
    def invalidTime_input(self, invalid_time):
        """
@@ -107,8 +107,8 @@
        :param invalid_time:
        :return:
        """
        self.send_text(invalid_time, PackageList.add_invalidTime)
        self.click(PackageList.add_invalidTime)
        self.send_text_wait(invalid_time, PackageList.add_invalidTime)
        self.click_wait(PackageList.add_invalidTime)
    def testTemplateLangType_select(self, text):
        """
@@ -119,9 +119,9 @@
        # 分割text
        lang_types = text.split(",")
        # 点击下拉框
        self.click(PackageList.add_templateLangType_select)
        self.click_wait(PackageList.add_templateLangType_select)
        # 获取所有选项
        options = self.get_elements(PackageList.add_templateLangType_option)
        options = self.get_elements_wait(PackageList.add_templateLangType_option)
        # 判断选项是否与传入的选项相等
        for opt in options:
            for lang_type in lang_types:
@@ -139,9 +139,9 @@
        # 分割text
        lang_types = text.split(",")
        # 点击下拉框
        self.click(PackageList.add_hrTemplateLangType_select)
        self.click_wait(PackageList.add_hrTemplateLangType_select)
        # 获取所有选项
        options = self.get_elements(PackageList.add_hrTemplateLangType_option)
        options = self.get_elements_wait(PackageList.add_hrTemplateLangType_option)
        # 判断选项是否与传入的选项相等
        for opt in options:
            for lang_type in lang_types:
@@ -159,9 +159,9 @@
        # 分割text
        templates = text.split(",")
        # 点击下拉框
        self.click(PackageList.add_reportTemplateId_select)
        self.click_wait(PackageList.add_reportTemplateId_select)
        # 获取所有选项
        options = self.get_elements(PackageList.add_reportTemplateId_option)
        options = self.get_elements_wait(PackageList.add_reportTemplateId_option)
        # 判断选项是否与传入的选项相等
        for opt in options:
            for template in templates:
@@ -170,7 +170,7 @@
                    opt.click()
                    break
        # 再次点击下拉框
        self.click(PackageList.add_reportTemplateId_select)
        self.click_wait(PackageList.add_reportTemplateId_select)
    def position_input(self, text):
        """
@@ -178,7 +178,7 @@
        :param text:
        :return:
        """
        self.send_text(text, PackageList.add_position_input)
        self.send_text_wait(text, PackageList.add_position_input)
    def professionalCategory_input(self, text):
        """
@@ -186,7 +186,7 @@
        :param text:
        :return:
        """
        self.send_text(text, PackageList.add_professionalCategory_input)
        self.send_text_wait(text, PackageList.add_professionalCategory_input)
    def superiorPosition_input(self, text):
        """
@@ -194,14 +194,14 @@
        :param text:
        :return:
        """
        self.send_text(text, PackageList.add_superiorPosition_input)
        self.send_text_wait(text, PackageList.add_superiorPosition_input)
    def autoSendReport_checkbox(self):
        """
        点击测试者接收报告
        :return:
        """
        self.click(PackageList.add_autoSendReport_checkbox)
        self.click_wait(PackageList.add_autoSendReport_checkbox)
    def memberReportLangType_select(self, text):
        """
@@ -212,9 +212,9 @@
        # 分割text
        lang_types = text.split(",")
        # 点击下拉框
        self.click(PackageList.add_memberTemplateLangType_select)
        self.click_wait(PackageList.add_memberTemplateLangType_select)
        # 获取所有选项
        options = self.get_elements(PackageList.add_memberTemplateLangType_option)
        options = self.get_elements_wait(PackageList.add_memberTemplateLangType_option)
        # 判断选项是否与传入的选项相等
        for opt in options:
            for lang_type in lang_types:
@@ -230,7 +230,7 @@
        """
        # 回到上一层iframe
        self.switch_parent_iframe()
        self.click(PackageList.add_confirm_btn)
        self.click_wait(PackageList.add_confirm_btn)
    def is_create_success(self, packageName):
        """
@@ -238,7 +238,7 @@
        :param packageName: 测试包名称
        :return: bool
        """
        names = self.get_elements(PackageList.table_packageName_a)
        names = self.get_elements_wait(PackageList.table_packageName_a)
        for name in names:
            if name.text == packageName:
                return True
@@ -251,7 +251,7 @@
        :return:
        """
        # 获取到table的所有tr
        table_trs = self.get_elements(PackageList.table_package_tr)
        table_trs = self.get_elements_wait(PackageList.table_package_tr)
        for tr in table_trs:
            # 测试包名称在tr中的定位
            package_name_loc = (By.XPATH, "td[2]/a")
@@ -271,7 +271,7 @@
        点击生成分享链接按钮
        :return:
        """
        self.click(PackageList.share_1_btn)
        self.click_wait(PackageList.share_1_btn)
    def get_share_url(self):
        """
@@ -284,11 +284,10 @@
        url = self.get_input_value_js(PackageList.share_url_input)
        # 退回上一层iframe
        self.switch_parent_iframe()
        time.sleep(1)
        # 点击关闭按钮
        self.click(PackageList.share_cancel_btn)
        self.click_wait(PackageList.share_cancel_btn)
        time.sleep(1)
        return url
    def selector(self, click_loc, options_loc, text):
        """
@@ -299,9 +298,9 @@
        :return:
        """
        # 点击下拉框
        self.click(click_loc)
        self.click_wait(click_loc)
        # 获取所有选项
        options = self.get_elements(options_loc)
        options = self.get_elements_wait(options_loc)
        # 判断选项是否与传入的选项相等
        for opt in options:
            if opt.text == text:
report/report.html
@@ -253,10 +253,10 @@
}
</script>
    <h1>report.html</h1>
    <p>Report generated on 14-Jul-2023 at 17:57:30 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p>
    <p>Report generated on 17-Jul-2023 at 16:13:07 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p>
    <h2>Summary</h2>
    <p>0 tests ran in 0.01 seconds. </p>
    <p class="filter" hidden="true">(Un)check the boxes to filter the results.</p><input checked="true" class="filter" data-test-result="passed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="passed">0 passed</span>, <input checked="true" class="filter" data-test-result="skipped" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="skipped">0 skipped</span>, <input checked="true" class="filter" data-test-result="failed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="failed">0 failed</span>, <input checked="true" class="filter" data-test-result="error" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="error">0 errors</span>, <input checked="true" class="filter" data-test-result="xfailed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xfailed">0 expected failures</span>, <input checked="true" class="filter" data-test-result="xpassed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xpassed">0 unexpected passes</span>
    <p>10 tests ran in 388.23 seconds. </p>
    <p class="filter" hidden="true">(Un)check the boxes to filter the results.</p><input checked="true" class="filter" data-test-result="passed" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="passed">10 passed</span>, <input checked="true" class="filter" data-test-result="skipped" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="skipped">0 skipped</span>, <input checked="true" class="filter" data-test-result="failed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="failed">0 failed</span>, <input checked="true" class="filter" data-test-result="error" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="error">0 errors</span>, <input checked="true" class="filter" data-test-result="xfailed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xfailed">0 expected failures</span>, <input checked="true" class="filter" data-test-result="xpassed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xpassed">0 unexpected passes</span>
    <h2>Results</h2>
    <table id="results-table">
      <thead id="results-table-head">
@@ -266,4 +266,94 @@
          <th class="sortable" col="duration">Duration</th>
          <th class="sortable links" col="links">Links</th></tr>
        <tr hidden="true" id="not-found-message">
          <th colspan="4">No results found. Try to check the filters</th></tr></thead></table></body></html>
          <th colspan="4">No results found. Try to check the filters</th></tr></thead>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_jaq.py::TestJAQ::test_login[login]</td>
          <td class="col-duration">4.92</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_jaq.py::TestJAQ::test_create_package[JAQ]</td>
          <td class="col-duration">14.10</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_jaq.py::TestJAQ::test_open_url[JAQ]</td>
          <td class="col-duration">14.05</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_jaq.py::TestJAQ::test_answer</td>
          <td class="col-duration">93.40</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_jaq.py::TestJAQ::test_delete_package</td>
          <td class="col-duration">7.31</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_maq.py::TestMAQ::test_login[login]</td>
          <td class="col-duration">4.82</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_maq.py::TestMAQ::test_create_package[MAQ]</td>
          <td class="col-duration">14.45</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_maq.py::TestMAQ::test_open_url[MAQ]</td>
          <td class="col-duration">13.81</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_maq.py::TestMAQ::test_answer</td>
          <td class="col-duration">213.81</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">testcase/test_maq.py::TestMAQ::test_delete_package</td>
          <td class="col-duration">7.38</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="empty log">No log output captured.</div></td></tr></tbody></table></body></html>
testcase/conftest.py
New file
@@ -0,0 +1,24 @@
"""
    测试数据共享文件
"""
import pytest
import json
import os
@pytest.fixture
def data_read(request) -> dict:
    """
    读取测试使用的数据
    :param request: 接收传递的参数
    :return: 字典
    """
    # 获取当前项目根路径
    root_path = os.getcwd()
    # 获取到要获取数据的键
    key = request.param
    # 读取数据
    with open(root_path + r"\data\test_data.json", "r", encoding="utf-8") as f:
        values = json.load(f)
        return values[key]
testcase/test_jaq.py
@@ -8,16 +8,17 @@
from po.home_page import HomePage
from po.test_package_list_page import TestPackageListPage
from po.share_add_page import ShareAddPage
from po.answer_page import AnswerPage
from po.jaq_answer_page import JAQAnswerPage
from comm.my_random import *
class TestJAQ:
    driver = None
    test_package_name = "MAQ自动测试包-20230711151825"
    test_package_name = None
    def test_login(self):
    @pytest.mark.parametrize('data_read', ["login"], indirect=True)
    def test_login(self, data_read: dict):
        """
        打开页面并进行登录测试
        :return:
@@ -27,7 +28,7 @@
        login_page = LoginPage(driver)
        try:
            # 打开链接
            driver.get("http://161.117.57.194/login?lang=zh_CN")
            driver.get(data_read["url"])
        except:
            # 链接打开出现异常说明链接无法访问,捕获异常但不做处理
            pass
@@ -52,11 +53,12 @@
                except:
                    break
        login_page.login("admin", "ots@2021!!", "ots")
        login_page.login(data_read["username"], data_read["password"], data_read["code"])
        time.sleep(2)
        assert login_page.is_login_success()
    def test_create_package(self):
    @pytest.mark.parametrize('data_read', ["JAQ"], indirect=True)
    def test_create_package(self, data_read: dict):
        """
        创建测试包
        :return:
@@ -66,8 +68,7 @@
        # 创建home页面的对象
        home_page = HomePage(driver)
        # 点击左侧菜单进入页面
        home_page.menu_select("测试包管理/测试包列表")
        home_page.menu_select(data_read["menu"])
        # 创建测试包列表页面的对象
        test_package_list = TestPackageListPage(driver)
        # 点击创建按钮
@@ -81,66 +82,46 @@
        test_package_name = "JAQ自动测试包-" + time_str
        # 设置测试包名称为类变量
        TestJAQ.test_package_name = test_package_name
        # 报告企业名称
        report_company_name = "TAI测试"
        # 测试包类型
        test_package_type = "工作分析包"
        # 产品包
        prod_name = "JAQ"
        # HR邮箱
        hr_email = "2077506045@qq.com"
        # 有效期
        invalid_time = "2024-01-01 00:00:00"
        # 测试者邀请邮件语言类型
        test_email_lang_type = "中文"
        # hr报告邮件语言类型
        hr_report_email_lang_type = "中文"
        # 报告模板
        report_template = "JAQ-Complete-Chinese"
        # 要评价的岗位
        position = "主管"
        # 职业大类
        professional_category = "管理"
        # 上级岗位
        superior_position = "总经理"
        # 测试者报告邮件语言类型
        member_report_email_lang_type = "中文"
        # 获取创建测试包的数据
        create_data = data_read["add"]
        # 填写测试包名称
        test_package_list.testPackageName_input(test_package_name)
        # 填写报告企业名称
        test_package_list.reportCompanyName_input(report_company_name)
        test_package_list.reportCompanyName_input(create_data["company"])
        # 选择测试包类型
        test_package_list.testPackageType_select(test_package_type)
        test_package_list.testPackageType_select(create_data["type"])
        # 选择产品包
        test_package_list.prodTree_select(prod_name)
        test_package_list.prodTree_select(create_data["product"])
        # 输入hr邮箱
        test_package_list.hrReportEmail_input(hr_email)
        test_package_list.hrReportEmail_input(create_data["hrEmail"])
        # 输入有效期
        test_package_list.invalidTime_input(invalid_time)
        test_package_list.invalidTime_input(create_data["invalid"])
        # 选择邀请邮件语言类型
        test_package_list.testTemplateLangType_select(test_email_lang_type)
        test_package_list.testTemplateLangType_select(create_data["memberLang"])
        # 选择HR邮件语言类型
        test_package_list.hrTemplateLangType_select(hr_report_email_lang_type)
        test_package_list.hrTemplateLangType_select(create_data["hrReportLang"])
        # 选择报告模板
        test_package_list.reportTemplate_select(report_template)
        test_package_list.reportTemplate_select(create_data["reportTemplate"])
        # 输入要评价的岗位
        test_package_list.position_input(position)
        test_package_list.position_input(create_data["position"])
        # 输入职业大类
        test_package_list.professionalCategory_input(professional_category)
        test_package_list.professionalCategory_input(create_data["professionalCategory"])
        # 输入上级岗位
        test_package_list.superiorPosition_input(superior_position)
        test_package_list.superiorPosition_input(create_data["superiorPosition"])
        # 点击测试者接收报告
        test_package_list.autoSendReport_checkbox()
        # 选择测试者报告邮箱语言类型
        test_package_list.memberReportLangType_select(member_report_email_lang_type)
        test_package_list.memberReportLangType_select(create_data["memberReportLang"])
        # 点击确认按钮
        test_package_list.add_confirm()
        time.sleep(2)
        # 判断是否成功创建
        assert test_package_list.is_create_success(test_package_name)
        time.sleep(5)
    def test_open_url(self):
    @pytest.mark.parametrize('data_read', ["JAQ"], indirect=True)
    def test_open_url(self, data_read: dict):
        """
        打开分享链接
        :return:
@@ -163,30 +144,32 @@
        name = random_string(8)
        email = name + "@gmail.com"
        test_url = share_add.page_default_operation(name, email)
        # test_url = "http://161.117.57.194/exam-stu/#/ots/94830ada-8f6c-44c0-8946-79c43267d9c1/login"
        # 当前页面打开链接
        driver.get(test_url)
        # 点击提交按钮
        share_add.submit_btn()
        # 获取数据
        info = data_read["info"]
        # 填写基本信息并提交
        share_add.fill_info(email, "职员", "人事部")
        # 点击开始测试
        share_add.submit_btn()
        share_add.fill_info(email, info["position"], info["dept"])
        time.sleep(5)
    def test_answer(self):
        # 获取driver
        driver = TestJAQ.driver
        # 创建answer对象
        answer_page = AnswerPage(driver)
        answer_page = JAQAnswerPage(driver)
        # 点击开始测试
        answer_page.start_btn()
        # 开始答题
        # flag = answer_page.answer_MAQ()
        # if not flag:
        #     assert flag
        #     return
        flag = answer_page.answer_MAQ()
        # 答完题关闭当前标签页
        driver.close()
        # 切换到第一个标签页
        answer_page.switch_window(0)
        if flag is not None or not flag:
            assert flag
            return
    def test_delete_package(self):
        # 获取driver
testcase/test_maq.py
@@ -8,18 +8,19 @@
from po.home_page import HomePage
from po.test_package_list_page import TestPackageListPage
from po.share_add_page import ShareAddPage
from po.answer_page import AnswerPage
from po.maq_answer_page import MAQAnswerPage
from comm.my_random import *
class TestMAQ:
    driver = None
    test_package_name = "MAQ自动测试包-20230711151825"
    test_package_name = None
    def test_login(self):
    @pytest.mark.parametrize('data_read', ["login"], indirect=True)
    def test_login(self, data_read: dict):
        """
        打开页面并进行登录测试
        :param data_read: 执行数据读取的函数并获取到返回值
        :return:
        """
        TestMAQ.driver = webdriver.Chrome()
@@ -27,7 +28,7 @@
        login_page = LoginPage(driver)
        try:
            # 打开链接
            driver.get("http://161.117.57.194/login?lang=zh_CN")
            driver.get(data_read["url"])
        except:
            # 链接打开出现异常说明链接无法访问,捕获异常但不做处理
            pass
@@ -52,13 +53,15 @@
                except:
                    break
        login_page.login("admin", "ots@2021!!", "ots")
        login_page.login(data_read["username"], data_read["password"], data_read["code"])
        time.sleep(2)
        assert login_page.is_login_success()
    def test_create_package(self):
    @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True)
    def test_create_package(self, data_read: dict):
        """
        创建测试包
        :param data_read: 读取数据
        :return:
        """
        # 获取driver
@@ -66,8 +69,7 @@
        # 创建home页面的对象
        home_page = HomePage(driver)
        # 点击左侧菜单进入页面
        home_page.menu_select("测试包管理/测试包列表")
        home_page.menu_select(data_read["menu"])
        # 创建测试包列表页面的对象
        test_package_list = TestPackageListPage(driver)
        # 点击创建按钮
@@ -81,54 +83,39 @@
        test_package_name = "MAQ自动测试包-" + time_str
        # 设置测试包名称为类变量
        TestMAQ.test_package_name = test_package_name
        # 报告企业名称
        report_company_name = "TAI测试"
        # 测试包类型
        test_package_type = "人格测试包"
        # 产品包
        prod_name = "MAQV2"
        # HR邮箱
        hr_email = "2077506045@qq.com"
        # 有效期
        invalid_time = "2024-01-01 00:00:00"
        # 测试者邀请邮件语言类型
        test_email_lang_type = "中文"
        # hr报告邮件语言类型
        hr_report_email_lang_type = "中文"
        # 报告模板
        report_template = "MAQV2-Complete-Chinese"
        # 测试者报告邮件语言类型
        member_report_email_lang_type = "中文"
        # 获取创建测试包的数据
        create_data = data_read["add"]
        # 填写测试包名称
        test_package_list.testPackageName_input(test_package_name)
        # 填写报告企业名称
        test_package_list.reportCompanyName_input(report_company_name)
        test_package_list.reportCompanyName_input(create_data["company"])
        # 选择测试包类型
        test_package_list.testPackageType_select(test_package_type)
        test_package_list.testPackageType_select(create_data["type"])
        # 选择产品包
        test_package_list.prodTree_select(prod_name)
        test_package_list.prodTree_select(create_data["product"])
        # 输入hr邮箱
        test_package_list.hrReportEmail_input(hr_email)
        test_package_list.hrReportEmail_input(create_data["hrEmail"])
        # 输入有效期
        test_package_list.invalidTime_input(invalid_time)
        test_package_list.invalidTime_input(create_data["invalid"])
        # 选择邀请邮件语言类型
        test_package_list.testTemplateLangType_select(test_email_lang_type)
        test_package_list.testTemplateLangType_select(create_data["memberLang"])
        # 选择HR邮件语言类型
        test_package_list.hrTemplateLangType_select(hr_report_email_lang_type)
        test_package_list.hrTemplateLangType_select(create_data["hrReportLang"])
        # 选择报告模板
        test_package_list.reportTemplate_select(report_template)
        test_package_list.reportTemplate_select(create_data["reportTemplate"])
        # 点击测试者接收报告
        test_package_list.autoSendReport_checkbox()
        # 选择测试者报告邮箱语言类型
        test_package_list.memberReportLangType_select(member_report_email_lang_type)
        test_package_list.memberReportLangType_select(create_data["memberReportLang"])
        # 点击确认按钮
        test_package_list.add_confirm()
        time.sleep(2)
        # 判断是否成功创建
        assert test_package_list.is_create_success(test_package_name)
        time.sleep(5)
    def test_open_url(self):
    @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True)
    def test_open_url(self, data_read: dict):
        """
        打开分享链接
        :return:
@@ -151,30 +138,32 @@
        name = random_string(8)
        email = name + "@gmail.com"
        test_url = share_add.page_default_operation(name, email)
        # test_url = "http://161.117.57.194/exam-stu/#/ots/94830ada-8f6c-44c0-8946-79c43267d9c1/login"
        # 当前页面打开链接
        driver.get(test_url)
        # 点击提交按钮
        share_add.submit_btn()
        # 获取数据
        info = data_read["info"]
        # 填写基本信息并提交
        share_add.fill_info(email, "职员", "人事部")
        # 点击开始测试
        share_add.submit_btn()
        share_add.fill_info(email, info["position"], info["dept"])
        time.sleep(5)
    def test_answer(self):
        # 获取driver
        driver = TestMAQ.driver
        # 创建answer对象
        answer_page = AnswerPage(driver)
        answer_page = MAQAnswerPage(driver)
        # 点击开始测试
        answer_page.start_btn()
        # 开始答题
        flag = answer_page.answer_MAQ()
        if flag is None or not flag:
            assert flag
            return
        # 答完题关闭当前标签页
        driver.close()
        # 切换到第一个标签页
        answer_page.switch_window(0)
        if flag is not None or not flag:
            assert flag
            return
    def test_delete_package(self):
        # 获取driver
@@ -186,7 +175,6 @@
        time.sleep(5)
        # 关闭
        driver.quit()
if __name__ == '__main__':