# -*- coding: utf-8 -*- ''' @Time: 2019-08-04 @Author: 吴润泽 ''' from selenium.webdriver.common.by import By from pages.base_page import BasePage from common.mylog import get_logger logger = get_logger("caontacts_page") class ContactsPage(BasePage): _contacts_locator = (By.XPATH, "//*[@id='menu_contacts']/span") _add_member_btn_locator = (By.XPATH, "//div[@class='ww_operationBar']//a[@class='qui_btn ww_btn js_add_member']") _user_input_locator = (By.NAME, "username") _userid_input_locator = (By.NAME, "acctid") _memberAdd_phone_locator = (By.NAME, "mobile") _save_btn_locator = (By.LINK_TEXT, "保存") def click_contacts(self): ele = self.get_presence_element(self._contacts_locator) return ele.click() def click_add_btn(self): ele = self.get_visible_element(self._add_member_btn_locator) ele.click() def input_info(self, username, userid, mobile): user_input = self.get_visible_element(self._user_input_locator) user_input.send_keys(username)
''' @Time: 2019-08-17 @Author: 吴润泽 ''' import pytest from appium import webdriver from desired_caps.get_desired_caps import desired_caps from pages.page_objects.search_page import SearchPage from pages.page_objects.index_page import IndexPage from pages.page_objects.login_page import LoginPage from pages.page_objects.zixuan_page import ZixuanPage from common.mylog import get_logger logger = get_logger("conftest") # 根据测试用例需求,动态配置启动参数。 def basedriver(noReset=None, port=4723, **kwargs): if noReset is not None: desired_caps["noReset"] = noReset if kwargs: # 修改从配置文件当中读取出来的desired_caps. for key, value in kwargs: desired_caps[key] = value # 启动appium会话 - 连接appium server 端口号 driver = webdriver.Remote('http://127.0.0.1:{}/wd/hub'.format(port), desired_caps) return driver @pytest.fixture(scope="class")
# -*- coding: utf-8 -*- # @Time : 2019/1/22 13:50 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_withdraw.py # @Software : PyCharm import unittest import re from libext.ddt import ddt, data from common import contants from common.do_testcase_excel import DoExcel from common.mysql import MysqlUtil from common import mylog from common.request import HttpRequests logger = mylog.get_logger("case_withdraw") @ddt class TestWithdraw(unittest.TestCase): withdraw_data = DoExcel(contants.case_file, "withdraw").read_data() @classmethod def setUpClass(cls): logger.info("************开始执行withdraw模块测试用例*****************") cls.mysql = MysqlUtil() @classmethod def tearDownClass(cls): cls.mysql.close_database() logger.info("************withdraw模块测试用例脚本执行完毕*****************")
# -*- coding: utf-8 -*- ''' @Time: 2019-08-04 @Author: 吴润泽 ''' import time import pytest, allure from common.mylog import get_logger from common.contants import img logger = get_logger("test_img_manager") @pytest.mark.usefixtures("hook4test_upload_img") @allure.feature('企业微信测试') class TestManagerImg(): @allure.story('测试上传图片') def test_upload_img(self, hook4test_upload_img): with allure.step("进入管理页面"): img_manager_page = hook4test_upload_img with allure.step("获取当前页面图片张数"): time.sleep(2) before = img_manager_page.get_img_amount() with allure.step("上传图片"): img_manager_page.upload_file(img) with allure.step("再次获取页面图片张数"):
# E-mail :[email protected] # File :base.py # Software :PyCharm Community Edition import win32gui import win32con import time from selenium.common.exceptions import TimeoutException from selenium.webdriver import Chrome, ActionChains from selenium.webdriver.remote.webelement import WebElement from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from common import mylog from common import contants logger = mylog.get_logger("basepage") class BasePage: def __init__(self, driver: Chrome): self.driver = driver def get_visible_element(self, locator, eqc=20) -> WebElement: ''' 定位元素,参数locator为元祖类型 :param locator: :param eqc: :return: ''' try:
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/1/22 10:13 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_login.py # @Software : PyCharm import unittest from libext.ddt import ddt, data from common import contants from common.request import HttpRequests from common import mylog from common.do_testcase_excel import DoExcel logger = mylog.get_logger("case_login") @ddt class TestLogin(unittest.TestCase): # filepath = FilePath() login_data = DoExcel(contants.case_file, "login").read_data() @classmethod def setUpClass(cls): logger.info("************开始执行login模块测试用例*****************") @classmethod def tearDownClass(cls): logger.info("************login模块测试用例脚本执行完毕*****************")
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/4/26 14:47 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_tiku.py # @Software : PyCharm import pytest from common.mylog import get_logger logger = get_logger('test_tiku') @pytest.mark.usefixtures('start_app') @pytest.mark.usefixtures('tiku_env') class TestTiku: @pytest.mark.tiku @pytest.mark.run def test_tiku(self, tiku_env): tiku_page = tiku_env try: tiku_page.select_tiku_type() tiku_page.select_topic_level_by_name() tiku_page.select_topic_suite() except: raise if __name__ == '__main__': pytest.main('-m tiku')
# -*- coding: utf-8 -*- ''' @Time: 2019-08-18 @Author: 吴润泽 ''' import pytest import allure from common.mylog import get_logger from appium import webdriver from desired_caps.get_desired_caps import desired_caps from pages.page_objects.search_page import SearchPage from pages.page_objects.zixuan_page import ZixuanPage from pages.page_objects.index_page import IndexPage logger = get_logger('test_自选') @allure.feature("测试雪球app的加自选的几种情况") @pytest.mark.zixuan class TestZixuan: @classmethod def setup_class(cls): cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) def teardown_class(self): self.driver.close_app() self.driver.quit() @allure.story("测试加自选") def test_add_collection(self):
# @Author :Yosef-夜雨声烦 # E-mail :[email protected] # File :basepage.py # Software :PyCharm Community Edition import time from appium.webdriver import WebElement from selenium.common.exceptions import TimeoutException from selenium.webdriver import ActionChains from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from common import contants from common.contants import screenshot_dir from common.mylog import get_logger from appium.webdriver.common.mobileby import MobileBy logger = get_logger("basepage") class BasePage: def __init__(self, driver): self.driver = driver #等待元素可见 def wait_eleVisible(self, locator, timeout=30, poll_frequency=0.5, model_name="model") -> WebElement: logger.info("等待元素可见:{}".format(locator)) try: wait_start_time = time.time()
#!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time :2019/1/20 19:23 # @Author :Yosef-夜雨声烦 # E-mail :[email protected] # File :request_session.py # Software :PyCharm Community Edition import requests from common import mylog from common.myjson import MyJson from common.config import ReadConfig logger = mylog.get_logger("session_requset") class Request: def __init__(self): self.session = requests.sessions.session() def request(self, url, method, params=None): method = method.upper() config = ReadConfig() pre_url = config.get_value("env-api", "pre_url") url = pre_url + url if params is not None and type(params) == str: params = MyJson().to_python_dict(params) if method == "GET": res = self.session.get(url=url, params=params) logger.info('response: {0}'.format(res.text))
# -*- coding: utf-8 -*- ''' @Time: 2019-08-17 @Author: 吴润泽 ''' import pytest import allure from testdata.search_data import search_data from common.mylog import get_logger logger = get_logger('test_search') @pytest.mark.usefixtures("start_app") @pytest.mark.usefixtures("search_env") @allure.feature("测试首页搜索框") class TestLogin: @pytest.mark.parametrize("value", search_data) @allure.story("参数化,用例合一") def test_wrong_login(self, value, search_env): with allure.step("读取conftest中前后置条件"): search_page = search_env with allure.step("读取测试数据"): name = value["name"] expected = value["expected"] with allure.step("搜索相应的公司"): search_page.search(name=name) with allure.step("获得搜索结果"): res = search_page.get_result()
# @Time : 2019/1/16 14:44 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_recharge.py # @Software : PyCharm Community Edition import unittest import re from libext.ddt import ddt, data from common import contants from common.request import HttpRequests from common import mylog from common.do_testcase_excel import DoExcel from common.myjson import MyJson from common.mysql import MysqlUtil logger = mylog.get_logger("case_recharge") @ddt class TestRecharge(unittest.TestCase): recharge_data = DoExcel(contants.case_file, "recharge").read_data() @classmethod def setUpClass(cls): logger.info("************开始执行recharge模块测试用例*****************") cls.mysql = MysqlUtil() @classmethod def tearDownClass(cls): cls.mysql.close_database() logger.info("************recharge模块测试用例脚本执行完毕*****************")
# File :test_userRegister.py # Software :PyCharm Community Edition import unittest import re import time from suds.client import Client from libext.ddt import ddt, data from common import mylog from common.mcode import MCode from common.do_testcase_excel import DoExcel from common import contants from common import context from common.mysql import MysqlUtil from common.config import ReadConfig logger = mylog.get_logger(logger_name="test_userRegister") # print(testcases) @ddt class TestUserRegister(unittest.TestCase): excel = DoExcel(contants.case_file, "userRegister") testcases = excel.read_data() logger.info("读取userRegister所有测试用例成功") @classmethod def setUpClass(cls): cls.mysql = MysqlUtil() cls.MCodeParam = {'mobile': '${mobile}', 'tmpl_id': 1, 'client_ip': '47.107.168.87'}
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/4/23 11:16 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_send_message.py # @Software : PyCharm import pytest from common.mylog import get_logger from selenium.webdriver.common.by import By logger = get_logger("test_send_message") @pytest.mark.run @pytest.mark.test_send_message @pytest.mark.usefixtures("send_message") @pytest.mark.usefixtures("login") class TestSendMessage: def test_send_message(self, send_message): class_mate_page = send_message class_mate_page.click_teacher_talk_icon() message = "雨泽大佬你好帅testbyyysf" class_mate_page.send_message(message) locator = (By.XPATH, "//div[@class='text'][contains(.,'{}')]".format(message)) expected = class_mate_page.get_visible_element(locator).text try:
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/4/25 10:12 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_login.py # @Software : PyCharm import pytest from pages.page_objects.login_page import LoginPage # from pages.page_objects.index_page import IndexPage from testdatas.login_data import correct_login, wrong_login from common.mylog import get_logger from testcases.conftest import is_login logger = get_logger('test_login') @pytest.mark.usefixtures("start_app") @pytest.mark.usefixtures("login_env") @pytest.mark.run class TestLogin: @pytest.mark.login @pytest.mark.parametrize("value", wrong_login) def test_wrong_login(self, value, login_env): ''' 前提条件:打开App,保证未登录 后置条件:退出登录 :return: ''' mobile = value['mobile'] pwd = value['pwd']
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/4/23 10:06 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_uploadhomework.py # @Software : PyCharm import pytest from common.mylog import get_logger logger = get_logger("test_upload") @pytest.mark.run @pytest.mark.test_upload @pytest.mark.usefixtures("upload_file_env") @pytest.mark.usefixtures("login") class TestUploadFile: def test_upload_file(self, upload_file_env): homework_page = upload_file_env homework_page.upload_homework("easy") msg = homework_page.get_tips() try: assert msg == "作业提交成功" logger.info("success") except: logger.error("Failed") raise
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2018/12/13 15:26 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : send_mail.py # @Software : PyCharm Community Edition import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header from common import mylog from common import contants from common.do_receivers_excel import DoExcel as readreceiver logger = mylog.get_logger("Sendmail") class SendMail(): def __init__(self): self.receivers = readreceiver(contants.receiver_file, "receivers").read_data() self.log_path = contants.logs_log self.report_path = contants.reports_html def send_mail(self): sender = "*****@*****.**" # 发送者邮箱 password = "******" # 发送者密钥非密码 receivers = self.receivers
# -*- coding: utf-8 -*- ''' @Time: 2019-08-04 @Author: 吴润泽 ''' import pytest, allure from faker import Faker from common.mylog import get_logger logger = get_logger("test_add_member") @allure.feature("企业微信测试") @pytest.mark.usefixtures("hook4test_contact") class TestWeworkAddMember(): @allure.story("测试添加成员") def test_add_member(self, hook4test_contact): contact_page = hook4test_contact self.f = Faker(locale='zh_CN') self.fakename = self.f.name() self.fake_id = self.f.ssn() self.fake_mobile = self.f.phone_number() # 2 with allure.step("点击添加按钮"): contact_page.click_add_btn() logger.info("{}操作成功".format(contact_page._add_member_btn_locator)) # 3 with allure.step("输入用户名"): contact_page.input_info(self.fakename, self.fake_id, self.fake_mobile) logger.info("{}操作成功".format(contact_page._memberAdd_phone_locator))
# @Time : 2019/1/22 10:13 # @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_register.py # @Software : PyCharm import unittest from libext.ddt import ddt, data from common import contants from common.request import HttpRequests from common import mylog from common.do_testcase_excel import DoExcel from common.mysql import MysqlUtil from common.myjson import MyJson reg_data = DoExcel(contants.case_file, "register").read_data() logger = mylog.get_logger("case_register") @ddt class TestRegister(unittest.TestCase): @classmethod def setUpClass(cls): logger.info("************开始执行register模块测试用例*****************") cls.mysql = MysqlUtil() @classmethod def tearDownClass(cls): cls.mysql.close_database() logger.info("************register模块测试用例脚本执行完毕*****************") def setUp(self):
# @Author : Yosef-夜雨声烦 # @Email : [email protected] # @File : test_invest.py # @Software : PyCharm import unittest from common import contants from common import context from common import mylog from common.context import Context from common.do_testcase_excel import DoExcel from common.mysql import MysqlUtil from common.request_session import Request from libext.ddt import ddt, data logger = mylog.get_logger("invest_test") @ddt class TestInvest(unittest.TestCase): do_excel = DoExcel(contants.case_file, "invest") cases = do_excel.read_data() @classmethod def setUpClass(cls): cls.admin_request = Request() # 实例化对象 cls.request = Request() cls.mysql = MysqlUtil() # 前提条件1: 管理员登录,加标,审核 admin_login_param = '{"mobilephone":"${admin_user}","pwd":"${admin_pwd}"}' admin_login_param = context.replace_new(admin_login_param)
# !/usr/bin/python3 # -*- coding: utf-8 -*- # @Time :2019/1/13 17:10 # @Author :Yosef-夜雨声烦 # E-mail :[email protected] # File :request.py # Software :PyCharm Community Edition import requests from common import mylog from common.myjson import MyJson from common.config import ReadConfig logger = mylog.get_logger("http_requests") pre_url = ReadConfig().get_value("env-api", "pre_url") # print(pre_url) class HttpRequests: def __init__(self, url, params=None, headers=None, json=None): self.url = pre_url + url self.params = params self.headers = headers self.json = json def http_requests(self, method, cookies=None): if self.params is not None and type(self.params) == str: self.params = MyJson().to_python_dict(self.params) if method.upper() == "GET": try:
# -*- coding: utf-8 -*- # @Time :2019/2/23 21:12 # @Author :Yosef-夜雨声烦 # E-mail :[email protected] # File :test_sendMCode.py # Software :PyCharm Community Edition import unittest import suds from libext.ddt import ddt, data from common import mylog from common.mcode import MCode from common.do_testcase_excel import DoExcel from common import contants from common import context logger = mylog.get_logger(logger_name="test_sendMCode") # print(testcases) @ddt class TestSendMcode(unittest.TestCase): excel = DoExcel(contants.case_file, "sendMCode") testcases = excel.read_data() logger.info("读取sendMCode所有测试用例成功") @classmethod def setUpClass(cls): cls.mcode = MCode() @classmethod def tearDownClass(cls):
# File :test_bindBankCard.py # Software :PyCharm Community Edition import unittest from suds.client import Client from libext.ddt import ddt, data from common import mylog from common.mcode import MCode from common.do_testcase_excel import DoExcel from common import contants from common import context from common.context import Context from common.mysql import MysqlUtil from common.config import ReadConfig from common import db_select logger = mylog.get_logger(logger_name="test_bindBankCard") @ddt class TestBindBankCard(unittest.TestCase): excel = DoExcel(contants.case_file, "bindBankCard") testcases = excel.read_data() logger.info("读取bindBankCard所有测试用例成功") @classmethod def setUpClass(cls): cls.mysql = MysqlUtil() @classmethod def tearDownClass(cls): cls.mysql.close_database()
# @File : test_verifiedUserAuth.py # @Software : PyCharm import unittest from suds.client import Client from libext.ddt import ddt, data from common import mylog from common.mcode import MCode from common.do_testcase_excel import DoExcel from common import contants from common import context from common.context import Context from common.mysql import MysqlUtil from common.config import ReadConfig from common import db_select logger = mylog.get_logger(logger_name="test_verifyUserAuth") @ddt class TestUserRegister(unittest.TestCase): excel = DoExcel(contants.case_file, "verifyUserAuth") testcases = excel.read_data() logger.info("读取verifyUserAuth所有测试用例成功") @classmethod def setUpClass(cls): cls.mysql = MysqlUtil() cls.MCodeParam = {'mobile': '${mobile}', 'tmpl_id': 1, 'client_ip': '47.107.168.87'} cls.userRegister_data = '{"channel_id": "1", "ip": "129.45.6.7", "mobile": "${mobile}", ' \ '"pwd": "453173", "user_id": "${user_id}", "verify_code": "${verify_code}"}'
# !/usr/bin/python3 # -*- coding: utf-8 -*- # @Time :2018/12/29 22:00 # @Author :Yosef # E-mail :[email protected] # File :do_testcase_excel.py # Software :PyCharm Community Edition import openpyxl from common.config import ReadConfig from common import contants from common import mylog logger = mylog.get_logger("get test data") class DoExcel: def __init__(self, filepath, sheet_name): self.filepath = filepath self.sheet_name = sheet_name self.conf = ReadConfig().get_value("test_case_id", "button") def get_init_data(self): wb = openpyxl.load_workbook(self.filepath) sh = wb["init"] mobile = sh.cell(1, 2).value return mobile def update_init_data(self, value): wb = openpyxl.load_workbook(self.filepath) sh = wb["init"] sh.cell(1, 2).value = value
# !/usr/bin/python3 # -*- coding: utf-8 -*- # @Time :2019/1/12 20:19 # @Author :Yosef # E-mail :[email protected] # File :do_receivers_excel.py # Software :PyCharm Community Edition import openpyxl from common.config import ReadConfig from common import mylog from common import contants mylog = mylog.get_logger("get mail receivers") class TestCase: def __init__(self): self.id = None self.name = None self.email = None class DoExcel: def __init__(self, filepath, sheet_name): self.filepath = filepath self.sheet_name = sheet_name self.conf = ReadConfig().get_value("receiver_id", "button") def read_data(self): wb = openpyxl.load_workbook(self.filepath) sh = wb[self.sheet_name]