Ejemplo n.º 1
0
# -*- 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)
Ejemplo n.º 2
0
'''
 @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")
Ejemplo n.º 3
0
# -*- 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模块测试用例脚本执行完毕*****************")
Ejemplo n.º 4
0
# -*- 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("再次获取页面图片张数"):
Ejemplo n.º 5
0
# 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:
Ejemplo n.º 6
0
#!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模块测试用例脚本执行完毕*****************")
Ejemplo n.º 7
0
#!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')
Ejemplo n.º 8
0
# -*- 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):
Ejemplo n.º 9
0
# @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()
Ejemplo n.º 10
0
#!/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))
Ejemplo n.º 11
0
# -*- 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()
Ejemplo n.º 12
0
# @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模块测试用例脚本执行完毕*****************")
Ejemplo n.º 13
0
# 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'}
Ejemplo n.º 14
0
#!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:
Ejemplo n.º 15
0
#!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']
Ejemplo n.º 16
0
#!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

Ejemplo n.º 17
0
#!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
Ejemplo n.º 18
0
# -*- 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))
Ejemplo n.º 19
0
# @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):
Ejemplo n.º 20
0
# @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)
Ejemplo n.º 21
0
# !/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:
Ejemplo n.º 22
0
# -*- 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()
Ejemplo n.º 24
0
# @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}"}'
Ejemplo n.º 25
0
# !/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
Ejemplo n.º 26
0
# !/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]