# xiaobaiauto

## 介绍
简化现有Selenium、Requests等框架对于页面及接口的操作，也扩展了日志搜集、报告生成、
邮件发送等功能

### 版本说明
    版本：   功能：                        实现：
    1.*     只支持Web端                    √
    2.*     支持Web+API端                  √
    3.*     支持Web+API+Mock               ×
    4.*     支持Web+API+Mock+APP           ×
    5.*     支持Web+API+Mock+APP+Pref      ×
    备注：计划将mock独立成子项目
## 软件架构
集成了Selenium、SMTP、HTMLTestRunner、logging、Reuqests等模块

## 安装教程
    pip install xiaobaiauto
    or
    pip install xiaobaiauto==版本号
    or
    pip install -U xiaobaiauto # 更新到最新版
    or
    pip install xiaobaiauto -i https://pypi.doubanio.com/simple  #网速一般的使用本命令

    ***********************************注意******************************************
    正确安装之后若不能正常导入本库，请将auto.*.pyd与HTMLTestRunner.py复制到自己的项目包中
    *********************************************************************************

#### 使用代码之前请确保您的电脑中已经安装好浏览器及对应的驱动内容
    chrome与chromdriver驱动之间存在不兼容问题，所以最好都下载最新版本为最佳效果</b>
    默认会自动安装，若自当安装失败可能是写入文件权限受限（下方为驱动下载地址）
[chromedriver下载](http://npm.taobao.org/mirrors/chromedriver/) √

#### TestCase文件实例（Pycharm社区版 2019.3，Python3.8+）

    import unittest
    from xiaobaiauto.auto import pageObject, Report, log, EmailHandler, Api, Key
    # from auto import pageObject, Report, log, EmailHandler, Api, Key  # 库文件复制到本目录下使用本行代码
    class MyTestCase(unittest.TestCase):
        def setUp(self):
            """
            初始化日志
            :return:
            """
            self.logger = log()
            self.client = Api()
            self.page = pageObject()
            self.page.init(is_max=True)

        def test_api_xxx(self):
            headers = {'content-type': 'application/json'}
            json = {'type': 1, 'orderno': 'abcdef'}
            path = 'http://127.0.0.1:8080/api/v/1.0/'
            try:
                self.client.api(
                                method='GET',
                                url=path,
                                json=json,
                                headers=headers,
                                assertText="包含的预期结果"
                                ).json()
                self.logger.info('xxx接口请求成功')
            except:
                self.logger.error('xxx接口请求失败')
            # self.logger.debug('调试日志信息')
            # self.logger.warning('警告日志信息')
            # self.logger.error('错误日志信息')

        def test_web_12306(self):
            # 通过self.page   调用集成方法
            self.page.get(url='https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc&fs=%E4%B8%8A%E6%B5%B7,SHH&ts=%E9%83%91%E5%B7%9E,ZZF&date=2020-02-02&flag=N,N,Y')
            #self.page.add_cookie(cookie_dict={'name': '', 'value': ''})
            #self.page.add_cookie(cookie_str='name=xiaobai; password=123456')
            chufa = self.page.xpath('//*[@id="fromStationText"]')
            chufa.clear()
            chufa.send_keys('上海')
            chufa.send_keys(Keys.ENTER)

        def tearDown(self):
            pass

    if __name__ == '__main__':
        report_file_name = 'testReport.html'
        suite = unittest.TestSuite()
        # 添加需要执行的测试用例
        suite.addTest(MyTestCase('test_web_12306'))
        #suite.addTest(MyTestCase('test_api_xxx'))  # 不运行就注释掉
        fp = open(report_file_name, 'wb')
        # 生成报告
        runner = Report(
            stream=fp,
            title='测试',
            description='备注信息',
            tester='Tser'
        )
        runner.run(suite)
        fp.close()
        # 将测试报告发送指定邮件<数据务必修改>建议使用QQ邮箱（port参数默认使用SSL端口）
        email = EmailHandler(smtp='smtp.qq.com', port=25, sender_name='qq号', sender_passwd='邮箱授权码')
        email.sendemail(
            _to=['1@qq.com', '2@qq.com'],
            _cc=['admin@163.com', 'leader@gmail.com'],
            title='邮件标题',
            email_content='邮箱内容',
            _type='html',
            filename=[report_file_name]
        )

### 脚本运行（三步）
    step 1 :   打开cmd
    step 2 :   cd 脚本目录
    step 3 :   python 用例脚本名.py

### 提示
<b>QQ邮箱或者其它企业邮箱必须提前开启SMTP服务</b>
<b>部分邮箱对频发发送邮件进行拦截，所以大家在使用邮箱发送消息时请勿频繁尝试</b>

[点击这里了解QQ邮箱如何开启SMTP服务](https://jingyan.baidu.com/article/6079ad0eb14aaa28fe86db5a.html)

### 更新日志
    V2.3.4
    更新chromedriver.exe下载方式，部分失败原因为网络问题
    V2.3.3
    更新至Py3.8进行编译，有效解决高版本不能调用库的问题
    V2.3.1
    add_cookie()方法添加了cookie_str参数，允许使用从F12直接复制的cookie字符串
    直接赋值即可，cookie_dict与cookie_str两个参数只需要一个赋值即可
    V2.2.1
    因2.0.0版本不能适用于Pycharm社区版，调用失败问题，已修复

#### 参与贡献

作者: <b>@Tser</b><br>
©<b title="公众号：big_touch">小白科技</b>