基本框架
实现
- 打开web页面用户登录成功,拿到token值
- 打开手机app 使用从Web 页面上获取到的token值进行登录
创建一个新项目
新建git 项目
创建成功之后,将项目下载到本地
用Pycharm 打开项目
安装依赖库
- 配置项目的虚拟环境

选择虚拟环境。
使用的技术框架
- pytest 单元测试框架
- python-appium-client 手机app自动化测试框架
- selenium web 自动化测试框架
- openpyxl excel文件数据驱动
- pyyaml 配置文件
- allure-pytest 测试报告
requirements.txt
allure-pytest==2.8.34allure-python-commons==2.8.34appdirs==1.4.4Appium-Python-Client==1.0.2asgiref==3.3.1atomicwrites==1.4.0attrs==20.3.0certifi==2020.12.5chardet==4.0.0click==7.1.2colorama==0.4.4ddt==1.4.2distlib==0.3.1Django==3.1.7et-xmlfile==1.1.0filelock==3.0.12Flask==1.1.2idna==2.10iniconfig==1.1.1itsdangerous==1.1.0jdcal==1.4.1Jinja2==2.11.2MarkupSafe==1.1.1mysql-connector-python==8.0.23openpyxl==3.0.7packaging==20.7pipenv==2020.11.15pluggy==0.13.1protobuf==3.15.3py==1.9.0pymongo==3.11.4pyparsing==2.4.7pytest==6.1.2pytest-html==3.1.1pytest-metadata==1.11.0pytz==2021.1PyYAML==5.4.1requests==2.25.1robotframework==4.0.2robotframework-pythonlibcore==2.2.1robotframework-seleniumlibrary==5.1.3schedule==0.6.0selenium==3.141.0six==1.15.0sqlparse==0.4.1toml==0.10.2unittest-xml-reporting==3.0.4urllib3==1.26.4virtualenv==20.4.3virtualenv-clone==0.5.4Werkzeug==1.0.1xlrd==2.0.1xlutils==2.0.0xlwt==1.3.0
使用 命令
pip install -r requirements.txt
封装driver
web自动化使用的是Selenium, 手机App 自动化使用的是 appium, 两者之间使用的库的方法原理都是一样。
项目的根目录下, 还是使用 pytest 的 fixtures 功能 ,在自动化 web,app 之前先把web 和 app 驱动设置好
下载 ChromeDriver, 需要下载两个Chromedriver
https://npm.taobao.org/mirrors/chromedriver/
- 驱动Web浏览器
- 驱动手机app里面的H5页面
Web浏览器Driver
根据浏览器的版本下载 最近的版本
手机App的驱动
下载对应的版本
将两个driver 下载下来之后放到 drivers 目录中,分别重命名一下
根目录下创建 conftest.py
import pytestfrom selenium import webdriver as web # web 的 webdriverfrom appium import webdriver as app # appium 的webdriverimport osroot_dir = os.path.dirname(os.path.abspath(__file__))@pytest.fixture(scope="session")def wdriver():# 定义浏览器的驱动driverpath = os.path.join(root_dir,'drivers/webchromedriver.exe')wdriver = web.Chrome(executable_path=driverpath)wdriver.implicitly_wait(5)wdriver.maximize_window()yield wdriver# 所有的测试运行完毕之后 关闭 浏览器wdriver.quit()@pytest.fixture(scope='session')def adriver():# 定义 手机app driverchromedriver = os.path.join(root_dir,'drivers/appchromedriver.exe')desired_caps = {'platformName': 'Android', # 测试Android系统'udid': "127.0.0.1:62001", # adb devices 命令查看 设置为自己的设备'automationName': 'UiAutomator2', # 自动化引擎'noReset': False, # 不要重置app的状态'fullReset': False, # 不要清理app的缓存数据'chromedriverExecutable': chromedriver, # chromedriver 对应的绝对路径'appPackage': "org.cnodejs.android.md", # 应用的包名'appActivity': ".ui.activity.LaunchActivity" # 应用的活动页名称}adriver = app.Remote('http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)adriver.implicitly_wait(5) # 全局的隐式等待时间yield adriver # 将driver 传递出来# 所有的用例执行之后adriver.quit()
进行基本的测试
在testcases下创建 test_tmp.py 文件
"""临时测试 能否正常启动 app web"""import timedef test_drivers(wdriver,adriver):"""1. 打开浏览器端 访问 http://47.100.175.62:3000/ 使用 fanmao_36 密码 123456 登录2. 手机app 也到登录页面:return:"""wdriver.get("http://47.100.175.62:3000/")wdriver.find_element_by_xpath('//a[@href="/signin"]').click()wdriver.find_element_by_id('name').send_keys('fanmao_36')wdriver.find_element_by_id('pass').send_keys('123456')wdriver.find_element_by_xpath('//*[@type="submit"]').click()# 手机app端的操作adriver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton').click()time.sleep(1)adriver.find_element_by_id('org.cnodejs.android.md:id/tv_login_name').click()
运行测试用例,可以看到web和app都已经运行起来。
