#4 QCD_py

Open
LQ_LC wants to merge 9 commits from QCD_py into master
  1. +502
    -0
      9、pytest的使用.md
  2. BIN
      QCD_webUI/common/__pycache__/base_page.cpython-37.pyc
  3. BIN
      QCD_webUI/common/__pycache__/handle_conf.cpython-37.pyc
  4. BIN
      QCD_webUI/common/__pycache__/handle_log.cpython-37.pyc
  5. BIN
      QCD_webUI/common/__pycache__/handle_path.cpython-37.pyc
  6. +425
    -0
      QCD_webUI/common/base_page.py
  7. +18
    -0
      QCD_webUI/common/handle_conf.py
  8. +50
    -0
      QCD_webUI/common/handle_log.py
  9. +28
    -0
      QCD_webUI/common/handle_path.py
  10. +20
    -0
      QCD_webUI/conf/config.ini
  11. BIN
      QCD_webUI/datas/__pycache__/login_data.cpython-37.pyc
  12. BIN
      QCD_webUI/datas/__pycache__/login_ketangpai_data.cpython-37.pyc
  13. +18
    -0
      QCD_webUI/datas/login_data.py
  14. +14
    -0
      QCD_webUI/datas/login_ketangpai_data.py
  15. BIN
      QCD_webUI/error_image/2022-10-18_192422_请输入正确的手机号1.png
  16. BIN
      QCD_webUI/locator/__pycache__/class_room_locator.cpython-37.pyc
  17. BIN
      QCD_webUI/locator/__pycache__/index_ketangpai_locator.cpython-37.pyc
  18. BIN
      QCD_webUI/locator/__pycache__/index_locator.cpython-37.pyc
  19. BIN
      QCD_webUI/locator/__pycache__/login_ketangpai_locator.cpython-37.pyc
  20. BIN
      QCD_webUI/locator/__pycache__/login_locator.cpython-37.pyc
  21. +22
    -0
      QCD_webUI/locator/class_room_locator.py
  22. +12
    -0
      QCD_webUI/locator/index_ketangpai_locator.py
  23. +11
    -0
      QCD_webUI/locator/index_locator.py
  24. +15
    -0
      QCD_webUI/locator/login_ketangpai_locator.py
  25. +20
    -0
      QCD_webUI/locator/login_locator.py
  26. +169
    -0
      QCD_webUI/logs/log.log
  27. BIN
      QCD_webUI/page/__pycache__/classRoom_page.cpython-37.pyc
  28. BIN
      QCD_webUI/page/__pycache__/index_ketangpai_page.cpython-37.pyc
  29. BIN
      QCD_webUI/page/__pycache__/index_page.cpython-37.pyc
  30. BIN
      QCD_webUI/page/__pycache__/login_ketangpai_page.cpython-37.pyc
  31. BIN
      QCD_webUI/page/__pycache__/login_page.cpython-37.pyc
  32. +28
    -0
      QCD_webUI/page/aa.py
  33. +77
    -0
      QCD_webUI/page/classRoom_page.py
  34. +33
    -0
      QCD_webUI/page/index_ketangpai_page.py
  35. +22
    -0
      QCD_webUI/page/index_page.py
  36. +24
    -0
      QCD_webUI/page/login_ketangpai_page.py
  37. +35
    -0
      QCD_webUI/page/login_page.py
  38. +1
    -0
      QCD_webUI/reports/01d064f2-ca2e-4c13-8c5e-8ea708799805-container.json
  39. +1
    -0
      QCD_webUI/reports/03f759f1-7d00-4aae-ba8b-79aaada7d3aa-result.json
  40. +8
    -0
      QCD_webUI/reports/04d158ac-e511-4e34-a2d4-7f044ae10886-attachment.txt
  41. +1
    -0
      QCD_webUI/reports/05165ac1-4fc4-4391-9f9b-b05c4f2235c1-container.json
  42. +1
    -0
      QCD_webUI/reports/07f006df-00d5-4253-9efb-de010c2bd185-container.json
  43. +1
    -0
      QCD_webUI/reports/0969b68d-6081-4554-821c-72682cdd1791-container.json
  44. +1
    -0
      QCD_webUI/reports/09cfa742-38dd-477c-a779-d1f0cb23cd67-result.json
  45. +1
    -0
      QCD_webUI/reports/0bc20a53-93e1-4177-8737-306fb1869a2a-container.json
  46. +1
    -0
      QCD_webUI/reports/0c2757d6-34f0-4ab3-8b2a-911437c575eb-result.json
  47. +7
    -0
      QCD_webUI/reports/0dff4bb2-dcb8-4c92-bce8-857a5456a971-attachment.txt
  48. +1
    -0
      QCD_webUI/reports/1444bb4c-5194-4009-b640-06cc37570eea-result.json
  49. +1
    -0
      QCD_webUI/reports/1509452e-53ef-4bed-a13a-ea78553f251a-container.json
  50. +1
    -0
      QCD_webUI/reports/157721fd-2dad-498a-bde3-db9a5b9752ac-result.json
  51. +8
    -0
      QCD_webUI/reports/15c60f0f-9290-4fc8-ab26-ff2bbb79e2df-attachment.txt
  52. +8
    -0
      QCD_webUI/reports/162600d3-04fb-4fd0-a7ca-9d1e9b558d4b-attachment.txt
  53. +1
    -0
      QCD_webUI/reports/176e0aa1-5ff1-4de6-a768-73a866eed1f1-container.json
  54. +1
    -0
      QCD_webUI/reports/1966afaa-d9d7-44b8-9fc7-d0ea38e15f03-container.json
  55. +8
    -0
      QCD_webUI/reports/197451a0-f98f-4d27-bb5b-c4041f7af1fa-attachment.txt
  56. +1
    -0
      QCD_webUI/reports/19f3801e-86cc-4a10-b20c-9f56e5beae32-result.json
  57. +1
    -0
      QCD_webUI/reports/1aaadf4c-6e5a-429f-91ad-e5e91c4db36d-container.json
  58. +7
    -0
      QCD_webUI/reports/1d972c78-f860-4c70-993f-096b70fbb83f-attachment.txt
  59. +1
    -0
      QCD_webUI/reports/1de5e00b-d55d-47ae-b489-f2f1c2a3d623-container.json
  60. +1
    -0
      QCD_webUI/reports/1fa14c54-61b0-4319-b080-a009d4ee128f-container.json
  61. +1
    -0
      QCD_webUI/reports/20dd5d58-6169-4321-aac9-26a1142f81da-result.json
  62. +8
    -0
      QCD_webUI/reports/23feab0c-0501-41f2-abaf-1bd0fdd2fe6e-attachment.txt
  63. +8
    -0
      QCD_webUI/reports/2453cb86-9621-4fef-bb97-27b9092e820e-attachment.txt
  64. +1
    -0
      QCD_webUI/reports/261d33f7-d871-4698-bded-df64744f1149-container.json
  65. +1
    -0
      QCD_webUI/reports/2bdfa2ec-6f26-471c-953f-22bcacf1a5c7-container.json
  66. +1
    -0
      QCD_webUI/reports/2ce82035-cfa5-45bc-8770-8ebd1761745d-container.json
  67. +8
    -0
      QCD_webUI/reports/300cdbf3-6daf-4818-8143-1fbb6e526449-attachment.txt
  68. +1
    -0
      QCD_webUI/reports/324588a2-9e1a-4f58-97fe-5f141b64ce04-container.json
  69. +1
    -0
      QCD_webUI/reports/37d454a2-780d-4a85-b7d6-61ec4cc08635-container.json
  70. +8
    -0
      QCD_webUI/reports/394ace3e-fb1f-4adf-8ae9-9f5875f1e695-attachment.txt
  71. +1
    -0
      QCD_webUI/reports/3d381565-f84d-48d7-b8fb-a85d1f9135f3-result.json
  72. +1
    -0
      QCD_webUI/reports/3d830fd2-d4af-4ff1-8b63-ef9033629da6-result.json
  73. +1
    -0
      QCD_webUI/reports/3f04f716-7661-4e75-a0d2-d9b3b48abb86-container.json
  74. +8
    -0
      QCD_webUI/reports/41eb2c1d-3082-4996-8014-6a90c82bdbc1-attachment.txt
  75. +1
    -0
      QCD_webUI/reports/46566d03-eb45-443c-ad54-4cae2666ca01-result.json
  76. +7
    -0
      QCD_webUI/reports/46719b61-de72-4598-8478-7b97305d2358-attachment.txt
  77. +1
    -0
      QCD_webUI/reports/476cc067-f801-40dd-9999-f75c34594424-container.json
  78. +1
    -0
      QCD_webUI/reports/48beff1f-d2b8-46e2-965d-2ae6d7e50a62-container.json
  79. +1
    -0
      QCD_webUI/reports/498b3278-f127-4940-864c-c3a11570408d-result.json
  80. +1
    -0
      QCD_webUI/reports/4a00595a-bc02-4926-bfde-e92439b4a49a-container.json
  81. +1
    -0
      QCD_webUI/reports/4feac40f-e48a-4a73-82fb-a5733cdc6df3-container.json
  82. +1
    -0
      QCD_webUI/reports/50a38208-ba12-4dd4-b718-a90241df32b4-container.json
  83. +7
    -0
      QCD_webUI/reports/55523684-86f9-4ca9-bece-58222f40b8eb-attachment.txt
  84. +1
    -0
      QCD_webUI/reports/5735c8aa-66de-4767-a2b5-43b5c249e510-result.json
  85. +1
    -0
      QCD_webUI/reports/5a2dae10-1359-4181-9e2a-45eb681120ce-container.json
  86. +1
    -0
      QCD_webUI/reports/5fa247f3-4b8a-4aea-ad0b-b902f01def6e-container.json
  87. +8
    -0
      QCD_webUI/reports/65acbf0b-0784-4837-9f4f-86f3dee016fe-attachment.txt
  88. +8
    -0
      QCD_webUI/reports/6e05471b-3c42-4e2d-8f16-99b671f3e2b6-attachment.txt
  89. +1
    -0
      QCD_webUI/reports/6f95a47b-2e04-48e5-bfdb-e5234e0e8d34-container.json
  90. +8
    -0
      QCD_webUI/reports/7072465e-a68d-49eb-88f7-a72fda417efc-attachment.txt
  91. +1
    -0
      QCD_webUI/reports/70d58884-776c-4210-889d-ec4629c23e05-result.json
  92. +1
    -0
      QCD_webUI/reports/71a0b9fe-d2f4-43a9-be37-d90ee4e4c617-container.json
  93. +8
    -0
      QCD_webUI/reports/71cbe848-56dd-4356-8c32-0ec65c4096f9-attachment.txt
  94. +8
    -0
      QCD_webUI/reports/777ffa41-204c-44a4-911e-3d8a42124148-attachment.txt
  95. +8
    -0
      QCD_webUI/reports/7b0ee1a5-8ff1-42a6-a998-fb3308ceec14-attachment.txt
  96. +1
    -0
      QCD_webUI/reports/8b5ea7f7-c6aa-4631-b458-3119f7cb904c-container.json
  97. +8
    -0
      QCD_webUI/reports/8d9e11a8-fcf1-49eb-9e58-7e3206be0bbb-attachment.txt
  98. +8
    -0
      QCD_webUI/reports/8da5dc98-5dfb-4ed8-a15d-a1aa97d9cee7-attachment.txt
  99. +1
    -0
      QCD_webUI/reports/8da689fd-dae2-4c33-be68-3374b107a36c-result.json
  100. +1
    -0
      QCD_webUI/reports/8eddac95-b3bb-4c63-be01-d0d643059ab7-container.json

+ 502
- 0
9、pytest的使用.md View File

@@ -0,0 +1,502 @@
# 一:pytest介绍
## 1、安装pytest
​ pip install pytest
## 2、对比pytest和unittest
![image-20220907152714097](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220907152714097.png)
pytest运行顺序,按用例定义的方法顺序执行。而unittest按ascii码执行。
## 3、pytest的运行方式
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220907154337517.png" alt="image-20220907154337517" style="zoom:50%;" />、<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220907154431976.png" alt="image-20220907154431976" style="zoom:50%;" />
## 4、测试用例规范
### 用例的规则
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220907154459771.png" alt="image-20220907154459771" style="zoom:50%;" />
```python
"""
pytest默认的编写规范
1、用例文件 以test开头
2、以test开头的函数会当成一条测试用例
3、以Test开头的类,会当成测试用例类,类中有不能init方法
测试类中,以test开头的函数会当成一条测试用例
"""
import pytest
def test_demo():
assert 1==100
class TestDemo:
def test_demo1(self):
assert 100 == 100
if __name__ == '__
```
### 自定义查找规则
​ 在运行的文件的同级别创建一个==pytest.ini==文件,里面输入以下代码
![image-20220907160948608](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220907160948608.png)
规则可自行定义,类、函数、文件按照规则运行用例
## 5、前置和后置
### 方式一:==setup_class、teardown_class、setup、teardown==
```python
lass TestDemo:
@classmethod
def setup_class(cls):
"""类级别的前置方法"""
print("类级别的前置方法")
def setup(self):
"""用例级别的前置方法"""
print("用例级别的前置方法")
def teardown(self):
"""用例级别的后置方法"""
print("用例级别的后置方法")
@classmethod
def teardown_class(cls):
"""类级别的后置方法"""
print("类级别的后置方法")
def test_demo1(self):
print("---------")
assert 100 == 100
if __name__ == '__main__':
pytest.main()
```
### ==方式二:pytest.fixture定义前后置更高级的使用==
注:在同一个文件里面,pytest用例执行的顺序,是按照用例文件中代码的前后顺序执行的;多个文件是根据文件名按ASCII码排序。
在定义前后置方法的时候(设置@pytest.fixture(scope="class",==autouse=True==) )表示为自动执行,不用在用例方法上加了。 (一般项目中很少使用,不好管控用例了)
第一:新建一个conftest.py 用来存放前置后置方法 ==【注:文件名必须叫做 conftest.py】== 可方便用例文件中直接使用,不需要导入
```python
"""
coding:utf-8
@Software:用来专门定义类前置、后置,用例级别前置后置方法 【注:文件名必须叫做 conftest.py】
@Time:2022/9/7 18:42
"""
import pytest
@pytest.fixture(scope="class") # 定义夹具,根据类运行
def case_cls():
"""定义类级别的前置和后置"""
print("-----类级别的前置代码在编写")
yield # 用yield隔开,用来区分前置和后置代码 【注:yield是一个关键字,它不是单独存在的,要写在fixture标记的固件中】
print("-----类级别的后置代码在编写")
@pytest.fixture(scope="function") #定义夹具,根据方法运行
def case_login():
"""定义用例级别的前置和后置"""
print("-----用例级别的前置代码在编写")
yield #用yield隔开,用来区分前置和后置代码 【注:yield是一个关键字,它不是单独存在的,要写在fixture标记的固件中】
print("-----用例级别的后置代码在编写")
```
第二步:类和方法使用前置后置
```python
"""
coding:utf-8
@Software:
@Time:2022/9/7 18:22
"""
import pytest
class TestFixture:
#会先去conftest.py固定的文件中找有没有case_login这个方法,如果有运行前后置,如果没有则报错
def test_01(self,case_login):#表示test_01方法运行了case_login方法,调用了用例级别前后置
print('----test01-----')
assert 1 ==1
def test_02(self,case_cls):#表示test_01方法运行了case_cls方法,调用了类级别前后置
print('----test02-----')
assert 1 ==1
if __name__ == '__main__':
pytest.main()
```
scope参数为session:所有测试.py文件执行前执行一次
scope参数为module:每一个测试.py文件执行前都会执行一次conftest文件中的fixture
scope参数为class:每一个测试文件中的测试类执行前都会执行一次conftest文件中的
scope参数为function:所有文件的测试用例执行前都会执行一次conftest文件中的fixture
#### ==yield与fixture之间的使用:== fixture中不能用return只能与yield联合使用
用yield隔开,用来区分前置和后置代码 【注:yield是一个关键字,它不是单独存在的,要写在fixture标记的固件中】
还可用yield用来返回数据,可返回多个参数以,分隔;例如:
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20221011143907318.png" alt="image-20221011143907318" style="zoom:80%;" />
## 6、用例打标记
### 1、单条用例加标签: pytest.mark.标签名
![image-20220908163521676](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220908163521676.png)
![image-20220908164126027](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220908164126027.png)
![image-20220908181457895](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220908181457895.png)
```python
"""
coding:utf-8
@Software:用例打标记
@Time:2022/9/8 16:45
"""
import pytest
class TestLogin:
@pytest.mark.smoking # 引入标记smoking
def test_login_success(self):
"""登录成功: 正向用例"""
assert "登录成功" == "登录成功"
@pytest.mark.sysTest #引入标记sysTest
def test_login_pwd(self):
"""密码错误: 反向用例"""
assert "密码错误" == "密码未输入"
@pytest.mark.sysTest #引入标记sysTest
def test_login_account(self):
"""密码错误: 反向用例"""
assert "账号错误" == "账号未输入"
```
```python
if __name__ == '__main__':
pytest.main(['-v', '-m sysTest']) # -v 展示用例详细信息 -m仅执行指定标签的用例 此处的-m后面跟标签的名称
```
自定义了两个标签,在实际项目中,可用标签来运行,如定义smoking标签来运行冒烟测试用例,定义sysTest来运行系统测试用例
```python
[pytest]
markers =
smoking
sysTest
```
### 2、类标记的方式pytest.mark.标签名
![image-20220908163507602](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220908163507602.png)
### 3、跳过用例 pytest.mark.skip
![image-20220908163828902](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220908163828902.png)
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220908163847161.png" alt="image-20220908163847161" style="zoom: 67%;" />
```python
class TestDemo:
a=100
@pytest.mark.skip #跳过此用例
def test_demo1(self):
print("11111")
assert 99 == 99
@pytest.mark.skipif(a==99,reason='a不等于99才执行该用例') #a=99条件满足才会跳过此用例
def test_demo2(self):
print("222")
assert 99 == 99
```
## 7、用例运行方式
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909143549908.png" alt="image-20220909143549908" style="zoom: 67%;" />
## 8、断言
pytest中断言,直接用关键字assert关键字
可用unittest中的断言,也可自己封装
## 9、测试报告allure
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909175443443.png" alt="image-20220909175443443" style="zoom: 67%;" />
一般采用allure,报告页面很好看。
### allure的安装与使用
#### 1)安装
https://github.com/allure-framework/allure2/releases
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909180328532.png" alt="image-20220909180328532" style="zoom:67%;" />
#### 2)添加环境变量
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909182609363.png" alt="image-20220909182609363" style="zoom: 50%;" />
#### 3)安装依赖包
#### pip install allure-pytest
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909182839090.png" alt="image-20220909182839090" style="zoom: 67%;" />
![image-20220909182828078](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909182828078.png)
#### 4)执行测试,生成报告
执行用例的时候加上参数 --alluredir=报告数据存放的路径
```python
import pytest
#执行的用例文件,生成allureReports文件
pytest.main(['testcases/test_01register.py','--alluredir=allureReports'])
```
#### 5)查看allure报告
进入项目路径,然后输入: ==allure serve 报告数据存放的路径==
![image-20220909191701331](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909191701331.png)
#### 6)allure报告展示失败截图
import allure
加入
#----------------将错误截图添加到allure报告中---------
with open(file_path,"rb") as f:
file = f.read()
allure.attach(file,"失败截图",allure.attachment_type.PNG)
```python
def error_save_screenshot(self, desc=None):
"""
错误截图
:return:
"""
i_date = time.strftime("%Y-%m-%d_%H%M%S_")
filename = i_date + desc + '.png'
file_path = os.path.join(ERROR_IMAGE_DIR, filename)
try:
self.driver.save_screenshot(file_path)
except Exception as e:
my_log.error("【{}】--操作进行截图--失败".format(desc))
my_log.exception(e)
raise e
else:
#----------------将错误截图添加到allure报告中---------
with open(file_path,"rb") as f:
file = f.read()
allure.attach(file,"失败截图",allure.attachment_type.PNG)
my_log.info("【{}】--操作进行截图--成功".format(desc))
my_log.info("图片名为{}".format(file_path))
```
#### 7)allure报告中显示用例标题、用例描述
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20221025182400829.png" alt="image-20221025182400829" style="zoom:67%;" />
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20221025181256967.png" alt="image-20221025181256967" style="zoom: 50%;" />、<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20221025181316599.png" alt="image-20221025181316599" style="zoom:50%;" />
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20221025181332321.png" alt="image-20221025181332321" style="zoom: 50%;" />、<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20221025181851055.png" alt="image-20221025181851055" style="zoom:50%;" />
## 10、重运行机制
pip install pytest-rerunfailures
<img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909192057616.png" alt="image-20220909192057616" style="zoom:67%;" />
```python
import pytest
if __name__ == '__main__':
#执行用例,生成allure报告, 通过reruns指定失败重运行的次数, --reruns-delay指定失败之后重运行间隔的时间
pytest.main(['test_demo.py',
'--reruns', '3', #重运行3次
'--reruns-delay', '5', #5s运行一次
'--alluredir=allureReports'
])
```
## 11、参数化(数据驱动)等同于unittest中的ddt
方法一:@pytest.mark.parametrize('定义一个接每条用例的名称',用例列表)
![image-20220909155823482](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220909155823482.png)
​ <img src="C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20220910200820751.png" alt="image-20220910200820751" style="zoom:67%;" />
## 12、修改用pytest运行方式
![image-20221011191204836](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20221011191204836.png)
## 13、pytest.main()参数
pytest.main()是pytest单元测试框架的运行入口
main() 命令行可传入参数:
-s: 显示程序中的print/logging输出
-v: 丰富信息模式, 输出更详细的用例执行信息
-q: 安静模式, 不输出环境信息
-x: 出现一条测试用例失败就退出测试
-k:可以使用and、not、or等逻辑运算符,匹配范围(文件名、类名、函数名)
https://blog.csdn.net/weixin_44688529/article/details/124946250
# 14、数据驱动和关键字驱动
数据驱动:就是测试数据管理的一种形式,主要用于在进行自动化测试读取输入、输出的数据;然后通过变更传给自动化用例代码中;将测试数据与代码进行分离;易维护。
常用的数据驱动有excel、yaml、json、py、txt、csv、数据库里的数据等
excel:上手简单、技术门槛低;但不易于数据的维护管理
yaml:使用灵活,方便管理;技术门槛较高
关键字驱动:关键字的驱动的思想:就是函数的调用, 把反复常用的代码封装关键字,通过外部方法调用关键字来降低代码冗余。(其实就是面向编程思维)。
注:单接口的自动化测试可何用 excel数据驱动来实现
关联接口的自动化测试可用全局变量的形式来实现
注:一般情况下企业中都是数据驱动+关键字驱动一起使用。
# 15、pytest插件
pytest-html 生成 html格式的自动化测试报告
==pytest-xdist 测试用例分布式执行。多cpu分发==
pytest-ordering 用于改变测试用例的执行顺序
pytest-rerunfailures 用例失败后重运行
allure-pytest 用于生成美观的测试报告
一键安装这些插件。可以用requirements.txt或者pipenv
![image-20230222120049003](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20230222120049003.png)
执行pip install -r requirements.txt
![image-20230222120101783](C:\Users\liaoqin\AppData\Roaming\Typora\typora-user-images\image-20230222120101783.png)
## 1)requirements.txt一键安装
第一步:将本地安装的python相关环境导出
首先要导出环境,windows如下:
进入python的安装路径D:\program\python37\Scripts
执行命令pip3 freeze > requirements.txt
然后在这个安装路径就生成了requirements.txt
第二步:将导出的requirements.txt环境在本地安装执行
1、在c盘的用户目录下新建一个pip文件夹,如:C:\Users\Administrator\pip
2、在pip文件夹中,新建一个pip.ini文件
内容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
3、在要运行的python项目下新建一个requirements.txt文件。
4、requirements.txt里放一键部署环境的安装包(就是第一步导出的文件)
5、在pycharm的Terminal终端执行:pip install -r requirements.txt
参考:https://zhuanlan.zhihu.com/p/548926498
## 2)pipenv一键安装
```
python版本要求:3.9.5
安装pipenv: pip install pipenv(必须在项目根目录下)
创建虚拟环境:pipenv install (必须在项目根目录下执行)
激活已存在的虚拟环境(如果不存在会创建一个):pipenv shell (必须在项目根目录下执行)
查看项目虚拟环境路径: pipenv --venv
退出虚拟环境:exit
注意:使用pipenv install会自动安装Pipfile里面的依赖包,该依赖包仅安装在虚拟环境里,不安装在测试机。
```
````
python版本为其他版本的安装办法:
1)首先在项目根目录下打开命令窗口,移除虚拟环境:pipenv --rm
2)更改项目根目录下的Pipfile文件
```
# 如下所示,3.9更改为3.7
[requires]
python_version = "3.7"
```
3)更改项目根目录下的Pipfile.lock文件
```
# 如下所示,3.9更改为3.7
"requires": {
"python_version": "3.7"
},
```
4)安装虚拟环境,同时安装依赖包:pipenv install
5)激活虚拟环境:pipenv shell
6)运行框架:python run.py
````

BIN
QCD_webUI/common/__pycache__/base_page.cpython-37.pyc View File


BIN
QCD_webUI/common/__pycache__/handle_conf.cpython-37.pyc View File


BIN
QCD_webUI/common/__pycache__/handle_log.cpython-37.pyc View File


BIN
QCD_webUI/common/__pycache__/handle_path.cpython-37.pyc View File


+ 425
- 0
QCD_webUI/common/base_page.py View File

@@ -0,0 +1,425 @@
"""
coding:utf-8
@Software:
封装一个所有页面的父类,在父类中封装一些页面常用的操作方法。
例如:查找元素、点击元素、输入内容、上传、错误截图、等待元素可见、等待元素可点击、等待元素存在、获取元素的属性、iframe切换、滑动操作等
优势:让页面继承base_page的好处,获取父类的方法。

@Time:2022/10/17 18:14
@Author:liaoqin
"""
import time,os,allure

import pyautogui
from selenium.webdriver import ActionChains
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

from common.handle_log import my_log
from common.handle_path import ERROR_IMAGE_DIR


class BasePage:

def __init__(self,driver:WebDriver):#driver:WebDriver声明 driver类型,方便后面使用driver时有提示信息
self.driver = driver

def get_element(self,loc,desc=None):
"""
查找元素
:param loc:元素定位器 loc = ('id', 'kw')
:param desc: 元素的描述
:return:
"""
try:
ele = self.wait_element_visibility(loc,desc)#self.driver.find_element(*loc)
except Exception as e:
my_log.error("查找元素--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("查找元素--【{}】--成功".format(desc))
return ele

def click_element(self, loc, desc=None):
"""
点击元素
:param loc:元素定位器
:param desc: 元素的描述
:return:
"""
try:
ele = self.wait_element_clickable(loc)
ele.click()
except Exception as e:
my_log.error("点击元素--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("点击元素--【{}】--成功".format(desc))
return ele

def clear_input(self,loc,desc):
"""
清空输入框
:param loc:input框元素的定位器
:param desc:元素的描述
:return:
"""
try:
self.driver.find_element(*loc).clear()
except Exception as e:
my_log.error("清空输入框--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("清空输入框--【{}】--成功".format(desc))

def double_click(self,loc,desc=None):
"""
双击元素
:param loc:元素定位器 loc = ('id', 'kw')
:param desc: 元素的描述
:return:
"""
action = ActionChains(self.driver)
try:
ele = self.wait_element_clickable(loc)
except Exception as e:
my_log.error("双击元素--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("定位双击元素--【{}】--成功".format(desc))
action.double_click(ele).perform() #双击执行操作命令
return ele

def input_send_keys(self, loc, value, desc=None):
"""
输入框,输入
:param loc: input框元素的定位器
:param value: 输入的值
:param desc: 元素的描述
:return:
"""
try:
self.driver.find_element(*loc).send_keys(value)
except Exception as e:
my_log.error("往输入框--【{}】--输入值失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("往输入框--【{}】--输入值成功".format(desc))

def get_element_text(self, loc, desc=None):
"""
获取元素的文本
:param loc: 元素的定位器
:param desc: 元素的描述
:return:
"""
try:
text = self.driver.find_element(*loc).text
except Exception as e:
my_log.error("查找元素--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("查找元素--【{}】--成功".format(desc))
return text

def get_element_attribute(self, loc, attr, desc=None):
"""
获取元素的属性
:param loc: 元素的定位器
:param attr: 属性名
:param desc: 元素的描述
:return:
"""
try:
res = self.driver.find_element(*loc).get_attribute(attr)
except Exception as e:
my_log.error("获取元素--【{}】--的属性失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("获取元素--【{}】--的属性成功".format(desc))
return res

def wait_element_visibility(self, loc, desc=None, timeout=10):
"""
等待元素可见
:param loc: 元素的定位器
:param desc: 元素的描述
:return:
"""
try:
ele = WebDriverWait(self.driver, timeout, 0.5).until(
EC.visibility_of_element_located(loc)
)
except Exception as e:
my_log.error("等待元素可见--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("等待元素可见--【{}】--成功".format(desc))
return ele

def wait_element_presence(self, loc, desc=None, timeout=10):
"""
等待元素存在
:param loc: 元素的定位器
:param desc: 元素的描述
:return:
"""
try:
ele = WebDriverWait(self.driver, timeout, 0.5).until(
EC.presence_of_element_located(loc)
)
except Exception as e:
my_log.error("等待元素可见--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("等待元素可见--【{}】--成功".format(desc))
return ele

def wait_element_clickable(self, loc, desc=None, timeout=10):
"""
等待元素可点击
:param loc: 元素的定位器
:param desc: 元素的描述
:return:
"""
try:
ele = WebDriverWait(self.driver, timeout, 0.5).until(
EC.element_to_be_clickable(loc)
)
except Exception as e:
my_log.error("等待元素可见--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("等待元素可见--【{}】--成功".format(desc))
return ele

def switch_to_iframe_loc(self, loc, desc=None):
"""
通过frame标签的定位表达式,进行iframe切换
:param loc: 元素的定位器
:param desc: 元素的描述
:return:
"""
try:
WebDriverWait(self.driver, 20, 0.5).until(
EC.frame_to_be_available_and_switch_to_it(loc)
)
except Exception as e:
my_log.error("等待iframe可见并进行切换--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("等待iframe可见并进行切换--【{}】--成功".format(desc))

def switch_to_iframe_name(self, name, desc=None):
"""
通过frame标签的name属性,进行iframe切换
:param name iframe标签的name属性
:param desc: 元素的描述
:return:
"""
try:
self.driver.switch_to.frame(name)
except Exception as e:
my_log.error("切换iframe--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("切换iframe--【{}】--成功".format(desc))

def error_save_screenshot(self, desc=None):
"""
错误截图
:return:
"""
i_date = time.strftime("%Y-%m-%d_%H%M%S_")
filename = i_date + desc + '.png'
file_path = os.path.join(ERROR_IMAGE_DIR, filename)
try:
self.driver.save_screenshot(file_path)
except Exception as e:
my_log.error("【{}】--操作进行截图--失败".format(desc))
my_log.exception(e)
raise e
else:
#----------------将错误截图添加到allure报告中---------
with open(file_path,"rb") as f:
file = f.read()
allure.attach(file,"失败截图",allure.attachment_type.PNG)

my_log.info("【{}】--操作进行截图--成功".format(desc))
my_log.info("图片名为{}".format(file_path))

def upload_input(self,desc, loc, *filePath):
"""
常用input定位标签进行多文件上传
:param desc: 元素的描述
:param loc: 元素定位器
:param *filePath: 一个或多个上传的文件路径
:return:
"""
try:
for i in filePath:
input_ele = self.get_element(*loc)
input_ele.send_keys(i)
except Exception as e:
my_log.error("文件上传--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("文件上传--【{}】--成功".format(desc))

def upload_pyautogui(self,desc, *filePath):
"""
采用pyautogui插件进行多文件上传 (解决系统原生组件)
:param desc: 元素的描述
:param *filePath: 一个或多个上传的文件路径
:return:
"""
try:
for i in filePath:
pyautogui.write('"{}" '.format(i))
except Exception as e:
my_log.error("文件上传--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
pyautogui.press('enter', 1)
my_log.info("文件上传--【{}】--成功".format(desc))


def execute_js_to_return(self, desc, js):
"""
执行js脚本并返回内容
:param desc:元素描述
:param js:执行的js脚本命令
:return:
"""
try:
ele = self.driver.execute_script("return {}".format(js))
time.sleep(1)
except Exception as e:
my_log.error("js脚本执行--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("js脚本执行--【{}】--成功".format(desc))
return ele

def execute_js(self, desc, js):
"""
执行js脚本
:param desc:元素描述
:param js:执行的js脚本命令
:return:
"""
try:
self.driver.execute_script(js)
time.sleep(1)
except Exception as e:
my_log.error("js脚本执行--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
my_log.info("js脚本执行--【{}】--成功".format(desc))

def move_to_element(self,desc,loc, timeout=10):
"""
悬停
:param timeout:
:param desc:
:param loc:
:return:
"""
try:
action = ActionChains(self.driver)
ele = self.wait_element_visibility(loc, timeout=timeout)
except Exception as e:
my_log.error("悬停--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
action.move_to_element(ele).perform()
my_log.info("悬停--【{}】--成功".format(desc))

def mouse_drag_and_drop(self, loc1, loc2,desc):
"""
鼠标从指定元素滑动到另一个指定元素
:param loc1:被拖拽的对象元素
:param loc2:停放的元素
:param desc:元素描述
:return:
"""
try:
action = ActionChains(self.driver)
ele1 = self.get_element(loc1)
ele2 = self.get_element(loc2)
# #点击被拖拽的对象元素,按下鼠标
action.click_and_hold(ele1)
# 移动到某元素上
action.move_to_element(ele2)
except Exception as e:
my_log.error("拖动--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
# 释放鼠标
action.release()
#执行
action.perform()
my_log.info("拖动--【{}】--成功".format(desc))

def mouse_x_to_y(self, xoffset, yoffset,desc):
"""
鼠标滑动,从x轴到y轴
:param xoffset:x轴
:param yoffset:y轴
:param desc:元素描述
:return:
"""
try:
action = ActionChains(self.driver)
# 1、按下鼠标
action.click_and_hold('定位到的元素')
# 2、移动鼠标到指定位置
action.move_by_offset(xoffset, yoffset) # 向左移动200px, y轴不动
except Exception as e:
my_log.error("拖动--【{}】--失败".format(desc))
my_log.exception(e)
self.error_save_screenshot(desc)
raise e
else:
# 释放鼠标
# 3、释放鼠标
action.release()
my_log.info("拖动--【{}】--成功".format(desc))


+ 18
- 0
QCD_webUI/common/handle_conf.py View File

@@ -0,0 +1,18 @@
"""
coding:utf-8
@Software:
@Time:2022/8/17 14:33
@Author:liaoqin
"""
import os
from configparser import ConfigParser
from common.handle_path import CONF_DIR

class Config(ConfigParser):
"""在创建对象时直接加载配置文件的内容"""

def __init__(self,conf_file):
super().__init__() #继承ConfigParser父类的方法
self.read(conf_file,encoding="utf-8")

conf = Config(os.path.join(CONF_DIR,'config.ini'))

+ 50
- 0
QCD_webUI/common/handle_log.py View File

@@ -0,0 +1,50 @@
"""
coding:utf-8
@Software:日志收集器
为避免程序中创建多个日志收集器而导致日志重复记录,使用时就只需导入 这个日志收集器
@Time:2022/8/15 17:20
@Author:liaoqin
"""
import logging,os
from common.handle_path import LOG_DIR
from common.handle_conf import conf

class Log:

def create_log(self,name,fh_level,sh_level,level,filename):
# 1、创建日志收集器
log = logging.getLogger(name)
# 2、设置日志收集器收集日志的等级
log.setLevel(level)
# 3、设置日志输出渠道
# 3.1、创建一个日志输出的渠道(输出到文件)
fh = logging.FileHandler(filename, encoding='utf-8')
fh.setLevel(fh_level) # 设置输出等级
log.addHandler(fh) # 将输出渠道绑定到日志收集器上

"""输出到控制台"""
# 3.2、创建一个日志输出的渠道(输出到控制台)
sh = logging.StreamHandler()
sh.setLevel(sh_level) # 设置输出等级
log.addHandler(sh) # 将输出渠道绑定到日志收集器上

# 4、设置日志输出的等级,格式 【时间,文件,行号,等级,信息】
formats = '%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s :%(message)s'
# 创建格式对象
log_format = logging.Formatter(formats)
# 为输出渠道设置输出格式
sh.setFormatter(log_format)
fh.setFormatter(log_format)
# 返回一个日志收集器
return log

my_log = Log().create_log(
name = conf.get("logging","name"),
fh_level = conf.get("logging","fh_level"),
sh_level = conf.get("logging","sh_level"),
level = conf.get("logging","level"),
filename = os.path.join(LOG_DIR,conf.get("logging","filename"))
)
# if __name__ == '__main__':
# log = create_log('login_case', 'DEBUG', 'DEBUG', level="DEBUG", filename='20220815_log.log')
# log.debug('---1111')

+ 28
- 0
QCD_webUI/common/handle_path.py View File

@@ -0,0 +1,28 @@
"""
coding:utf-8
@Software:封装路径的模块
@Time:2022/8/17 20:11
@Author:liaoqin
"""
import os

#项目的根目录的绝对路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

#用例数据所在目录
DATA_DIR = os.path.join(BASE_DIR,"datas")

#配置文件所在目录
CONF_DIR = os.path.join(BASE_DIR,"conf")

#日志文件所在目录
LOG_DIR = os.path.join(BASE_DIR,"logs")

#报告所在路径
REPORT_DIR = os.path.join(BASE_DIR,"reports")

#用例模块所在目录
CASE_DIR = os.path.join(BASE_DIR,"testcases")

#错误文件截图所在目录
ERROR_IMAGE_DIR = os.path.join(BASE_DIR,"error_image")

+ 20
- 0
QCD_webUI/conf/config.ini View File

@@ -0,0 +1,20 @@
[logging]
name = test_log
fh_level = DEBUG
sh_level = DEBUG
level = DEBUG
filename = log.log
[server_info]
server_url = http://api.lemonban.com/futureloan
headers = {"X-Lemonban-Media-Type": "lemonban.v2"}
[test_login]
mobile_phone = 13888887788
pwd = 12345678
admin_mobile= 18600879898
admin_pwd = 12345678
[mysql]
host = api.lemonban.com
port = 3306
user = future
password = 123456
database = futureloan

BIN
QCD_webUI/datas/__pycache__/login_data.cpython-37.pyc View File


BIN
QCD_webUI/datas/__pycache__/login_ketangpai_data.cpython-37.pyc View File


+ 18
- 0
QCD_webUI/datas/login_data.py View File

@@ -0,0 +1,18 @@
"""
coding:utf-8
@Software:
@Time:2022/10/12 11:15
@Author:liaoqin
"""
class LoginData:
success_case_data = [
{"mobile": "18684720553", "pwd": "python", "expected": "登录成功"}
]
error_case_data = [
{"mobile": "186", "pwd": "111", "expected": "请输入正确的手机号"},
{"mobile": "1860045454545", "pwd": "11", "expected": "请输入正确的手机号"},
{"mobile": "wqeq", "pwd": "111", "expected": "请输入正确的手机号"}
]
error_alert_data = [
{"mobile": "18611458781", "pwd": "111", "expected": "此账号没有经过授权,请联系管理员!"}
]

+ 14
- 0
QCD_webUI/datas/login_ketangpai_data.py View File

@@ -0,0 +1,14 @@
"""
coding:utf-8
@Software:
@Time:2022/10/12 21:16
@Author:liaoqin
"""
class LoginKeTangPaiData:
student_success_case_data = [
{"mobile": "403483118@qq.com", "pwd": "liaoqin96", "expected": "登录成功"}
]
teacher_success_case_data = [
{"mobile": "408848063@qq.com", "pwd": "nmb_python", "expected": "登录成功"}
]


BIN
QCD_webUI/error_image/2022-10-18_192422_请输入正确的手机号1.png View File

Before After
Width: 2160  |  Height: 1196  |  Size: 234 KiB

BIN
QCD_webUI/locator/__pycache__/class_room_locator.cpython-37.pyc View File


BIN
QCD_webUI/locator/__pycache__/index_ketangpai_locator.cpython-37.pyc View File


BIN
QCD_webUI/locator/__pycache__/index_locator.cpython-37.pyc View File


BIN
QCD_webUI/locator/__pycache__/login_ketangpai_locator.cpython-37.pyc View File


BIN
QCD_webUI/locator/__pycache__/login_locator.cpython-37.pyc View File


+ 22
- 0
QCD_webUI/locator/class_room_locator.py View File

@@ -0,0 +1,22 @@
"""
coding:utf-8
@Software:
@Time:2022/10/13 14:08
@Author:liaoqin
"""
from selenium.webdriver.common.by import By

class ClassRoomLocator:
#我的课堂---学生
sign_in_loc = (By.XPATH,"//span[text()='立即签到']")
sign_in_code_loc = (By.XPATH,'//input[@placeholder="请输入数字"]')
sure_sign_in_loc = (By.XPATH,'//div[@aria-label="签到"]//span[text()="确定"]')
layui_layer_content_loc = (By.XPATH,'//div[@role="alert"]//p')

#我的课堂---老师
teacher_sign_in_loc = (By.XPATH,'//span[text()="考勤"]')
teacher_create_sign_in_loc = (By.XPATH,'//span[text()="新建考勤"]')
teacher_create_num_loc = (By.XPATH,'//p[text()="数字考勤"]')
teacher_sure_num_sign_in_loc = (By.XPATH,'//div[@aria-label="新建考勤"]//span[text()="确定"]')
teacher_sure_num_sign_in_time_loc = (By.XPATH,'//div[@aria-label="考勤时间设置"]//span[text()="确定"]')
teacher_sign_in_code_loc = (By.XPATH,'//div[@class="sign-in"]//input[@class="el-input__inner"]')

+ 12
- 0
QCD_webUI/locator/index_ketangpai_locator.py View File

@@ -0,0 +1,12 @@
"""
coding:utf-8
@Software:
@Time:2022/10/12 11:36
@Author:liaoqin
"""
from selenium.webdriver.common.by import By


class IndexKeTangPaiLocator:
myClass_loc = (By.XPATH, "//li[text()='我的课堂']")
join_class_link_loc = (By.XPATH,'//div[@class="header-info"]//h3[@title="pythonUI自动化"]')

+ 11
- 0
QCD_webUI/locator/index_locator.py View File

@@ -0,0 +1,11 @@
"""
coding:utf-8
@Software:
@Time:2022/10/12 11:36
@Author:liaoqin
"""
from selenium.webdriver.common.by import By


class IndexLocator:
myAccount_loc = (By.XPATH, '//a[contains(text(),"我的帐户")]')

+ 15
- 0
QCD_webUI/locator/login_ketangpai_locator.py View File

@@ -0,0 +1,15 @@
"""
coding:utf-8
@Software:
@Time:2022/10/12 21:22
@Author:liaoqin
"""
from selenium.webdriver.common.by import By

class LoginKeTangPaiLocator:
mobile_loc = (By.XPATH,'//input[@placeholder="请输入邮箱/手机号/账号"]')
pwd_loc = (By.XPATH,'//input[@placeholder="请输入密码"]')
login_btn_loc = (By.XPATH,'//div[@class="margin-top"]//button')

#不方便扫码
forward_btn_loc= (By.XPATH,'//a[@class="btn-inconvenient"]')

+ 20
- 0
QCD_webUI/locator/login_locator.py View File

@@ -0,0 +1,20 @@
"""
coding:utf-8
@Software:元素定位层:用来存放元素定位,与测试用例层的代码进行分离;尽量一个页面一个
@Time:2022/10/12 11:19
@Author:liaoqin
"""
from selenium.webdriver.common.by import By


class LoginLocator:
#1、手机号
mobile_loc = (By.XPATH, '//input[@placeholder="手机号"]')
# 2、输入密码
pwd_loc = (By.XPATH, '//input[@placeholder="密码"]')
# 3、点击登录
login_btn_loc = (By.XPATH, '//button[text()="登录"]')
#页面上登录失败错误提示
form_error_info_btn_loc = (By.XPATH, '//div[@class="form-error-info"]')
#页面上登录失败弹框提示
layui_layer_content_loc = (By.XPATH, '//div[@class="layui-layer-content"]')

+ 169
- 0
QCD_webUI/logs/log.log View File

@@ -0,0 +1,169 @@
2022-10-18 19:24:16,761 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-18 19:24:16,762 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-18 19:24:16,860 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-18 19:24:16,860 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-18 19:24:16,970 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-18 19:24:17,008 - [base_page.py-->line:62] - INFO :点击元素--【None】--成功
2022-10-18 19:24:18,073 - [test_login_ddt.py-->line:33] - INFO :【登录成功--用例】------》执行成功
2022-10-18 19:24:22,496 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-18 19:24:22,496 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-18 19:24:22,578 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-18 19:24:22,578 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-18 19:24:22,679 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-18 19:24:22,716 - [base_page.py-->line:62] - INFO :点击元素--【None】--成功
2022-10-18 19:24:22,733 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-18 19:24:22,746 - [test_login_ddt.py-->line:48] - ERROR :【请输入正确的手机号1--用例】------》执行失败
2022-10-18 19:24:22,747 - [test_login_ddt.py-->line:49] - ERROR :assert '请输入正确的手机号' == '请输入正确的手机号1'
- 请输入正确的手机号1
? -
+ 请输入正确的手机号
Traceback (most recent call last):
File "D:\pythonProject\QCD_webUI\testcases\test_login_ddt.py", line 46, in test_login_fail
assert res == expected
AssertionError: assert '请输入正确的手机号' == '请输入正确的手机号1'
- 请输入正确的手机号1
? -
+ 请输入正确的手机号
2022-10-18 19:24:23,208 - [base_page.py-->line:268] - INFO :【请输入正确的手机号1】--操作进行截图--成功
2022-10-18 19:24:23,209 - [base_page.py-->line:269] - INFO :图片名为D:\pythonProject\QCD_webUI\error_image\2022-10-18_192422_请输入正确的手机号1.png
2022-10-18 19:24:27,675 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-18 19:24:27,675 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-18 19:24:27,768 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-18 19:24:27,768 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-18 19:24:27,874 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-18 19:24:27,913 - [base_page.py-->line:62] - INFO :点击元素--【None】--成功
2022-10-18 19:24:27,934 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-18 19:24:27,948 - [test_login_ddt.py-->line:53] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-10-18 19:24:32,050 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-18 19:24:32,051 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-18 19:24:32,134 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-18 19:24:32,134 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-18 19:24:32,242 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-18 19:24:32,285 - [base_page.py-->line:62] - INFO :点击元素--【None】--成功
2022-10-18 19:24:32,307 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-18 19:24:32,318 - [test_login_ddt.py-->line:53] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-10-18 19:24:36,423 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-18 19:24:36,424 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-18 19:24:36,552 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-18 19:24:36,552 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-18 19:24:36,657 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-18 19:24:36,707 - [base_page.py-->line:62] - INFO :点击元素--【None】--成功
2022-10-18 19:24:37,316 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败弹框提示】--成功
2022-10-18 19:24:37,327 - [test_login_ddt.py-->line:73] - INFO :【此账号没有经过授权,请联系管理员!--用例】------》执行成功
2022-10-31 16:33:35,543 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:33:35,544 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:33:35,715 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:33:35,716 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:33:35,925 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:33:36,003 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:33:38,970 - [test_login_ddt.py-->line:36] - INFO :【登录成功--用例】------》执行成功
2022-10-31 16:33:45,378 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:33:45,378 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:33:45,467 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:33:45,468 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:33:45,592 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:33:45,639 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:33:45,669 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-31 16:33:45,689 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-10-31 16:33:50,180 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:33:50,180 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:33:50,365 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:33:50,366 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:33:50,552 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:33:50,626 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:33:50,659 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-31 16:33:50,679 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-10-31 16:33:56,669 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:33:56,671 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:33:56,860 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:33:56,861 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:33:57,674 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:33:57,745 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:33:57,797 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-31 16:33:57,820 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-10-31 16:34:02,659 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:34:02,660 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:34:02,822 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:34:02,822 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:34:02,955 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:34:03,029 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:34:03,662 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败弹框提示】--成功
2022-10-31 16:34:03,677 - [test_login_ddt.py-->line:79] - INFO :【此账号没有经过授权,请联系管理员!--用例】------》执行成功
2022-11-01 15:12:28,672 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:12:28,672 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:12:28,864 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:12:28,864 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:12:29,015 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:12:29,090 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:12:30,151 - [test_login_ddt.py-->line:36] - INFO :【登录成功--用例】------》执行成功
2022-11-01 15:12:34,941 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:12:34,942 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:12:35,091 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:12:35,092 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:12:35,262 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:12:35,318 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:12:35,350 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:12:35,374 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-11-01 15:12:39,952 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:12:39,952 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:12:40,104 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:12:40,105 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:12:40,216 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:12:40,267 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:12:40,308 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:12:40,324 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-11-01 15:12:44,456 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:12:44,456 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:12:44,571 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:12:44,572 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:12:44,723 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:12:44,783 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:12:44,813 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:12:44,832 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-11-01 15:12:49,058 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:12:49,059 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:12:49,207 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:12:49,207 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:12:49,332 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:12:49,400 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:12:50,010 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败弹框提示】--成功
2022-11-01 15:12:50,022 - [test_login_ddt.py-->line:79] - INFO :【此账号没有经过授权,请联系管理员!--用例】------》执行成功
2022-11-01 15:13:24,260 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:13:24,261 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:13:24,322 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:13:24,322 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:13:24,394 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:13:24,425 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:13:25,138 - [test_login_ddt.py-->line:36] - INFO :【登录成功--用例】------》执行成功
2022-11-01 15:13:28,976 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:13:28,976 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:13:29,032 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:13:29,032 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:13:29,099 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:13:29,130 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:13:29,147 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:13:29,156 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-11-01 15:13:32,904 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:13:32,905 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:13:32,966 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:13:32,967 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:13:33,033 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:13:33,063 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:13:33,080 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:13:33,095 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-11-01 15:13:36,922 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:13:36,923 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:13:36,981 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:13:36,981 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:13:37,047 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:13:37,077 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:13:37,094 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:13:37,105 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功
2022-11-01 15:13:41,878 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:13:41,878 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:13:41,937 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:13:41,937 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:13:42,001 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:13:42,031 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:13:42,168 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败弹框提示】--成功
2022-11-01 15:13:42,178 - [test_login_ddt.py-->line:79] - INFO :【此账号没有经过授权,请联系管理员!--用例】------》执行成功

BIN
QCD_webUI/page/__pycache__/classRoom_page.cpython-37.pyc View File


BIN
QCD_webUI/page/__pycache__/index_ketangpai_page.cpython-37.pyc View File


BIN
QCD_webUI/page/__pycache__/index_page.cpython-37.pyc View File


BIN
QCD_webUI/page/__pycache__/login_ketangpai_page.cpython-37.pyc View File


BIN
QCD_webUI/page/__pycache__/login_page.cpython-37.pyc View File


+ 28
- 0
QCD_webUI/page/aa.py View File

@@ -0,0 +1,28 @@
"""
coding:utf-8
@Software:
@Time:2022/10/13 21:57
@Author:liaoqin
"""
from selenium import webdriver

class TestKeyWords(object):

#初始化
def __init__(self,browser_type):
self.open_browser(browser_type)

#调用浏览器
def open_browser(self,browser_type):
#定义全局变量
global driver
if browser_type == 'chrome':
driver = webdriver.Chrome()
driver.get('https://blog.csdn.net/')
elif browser_type == 'firefox':
driver = webdriver.Firefox()
else:
print('type error')

if __name__ == '__main__':
TestKeyWords('chrome')

+ 77
- 0
QCD_webUI/page/classRoom_page.py View File

@@ -0,0 +1,77 @@
"""
coding:utf-8
@Software:课程页面
@Time:2022/10/12 21:49
@Author:liaoqin
"""
import time
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from locator.class_room_locator import ClassRoomLocator


class ClassRoomPage:
def __init__(self,driver:WebDriver):
self.driver = driver

def check_work(self):
"""点击考勤"""
ele = WebDriverWait(self.driver, 5, 1).until(
EC.element_to_be_clickable(ClassRoomLocator.sign_in_loc)
)
ele.click()

def sure_signIn(self,signInCode):
"""输入考勤,确定签到"""
ele = WebDriverWait(self.driver, 5, 1).until(
EC.visibility_of_element_located(ClassRoomLocator.sign_in_code_loc)
)
ele.send_keys(signInCode)
self.driver.find_element(*ClassRoomLocator.sure_sign_in_loc).click()
# 加显示等待
ele1 = WebDriverWait(self.driver, 5, 0.5).until(
EC.visibility_of_element_located(ClassRoomLocator.layui_layer_content_loc)
)
res = ele1.text
return res

def teacher_sing_in(self):
"""点击考勤,生成考勤码"""
#1、老师点击:考勤
time.sleep(3)
ele = WebDriverWait(self.driver, 20, 0.5).until(
EC.element_to_be_clickable(ClassRoomLocator.teacher_sign_in_loc)
)
ele.click()
#2、新建考勤
ele1 = WebDriverWait(self.driver, 5, 0.5).until(
EC.element_to_be_clickable(ClassRoomLocator.teacher_create_sign_in_loc)
)
ele1.click()
#3、点击数据考勤
ele2 = WebDriverWait(self.driver, 5, 0.5).until(
EC.element_to_be_clickable(ClassRoomLocator.teacher_create_num_loc)
)
ele2.click()
#4、确定生成数据考勤
ele3 = WebDriverWait(self.driver, 5, 0.5).until(
EC.element_to_be_clickable(ClassRoomLocator.teacher_sure_num_sign_in_loc)
)
ele3.click()
#5、考勤时间设置
ele4 = WebDriverWait(self.driver, 5, 0.5).until(
EC.element_to_be_clickable(ClassRoomLocator.teacher_sure_num_sign_in_time_loc)
)
ele4.click()
WebDriverWait(self.driver, 5, 0.5).until(
EC.visibility_of_element_located(ClassRoomLocator.teacher_sign_in_code_loc)
)
time.sleep(3)
js = 'document.getElementsByClassName("el-input__inner")[1].value;'
#js返回值给pyhton接收时,需要加return
code = self.driver.execute_script("return {}".format(js))
#code = self.driver.execute_script(js)
time.sleep(1)
print("考勤码为:",code)
return code

+ 33
- 0
QCD_webUI/page/index_ketangpai_page.py View File

@@ -0,0 +1,33 @@
"""
coding:utf-8
@Software:
@Time:2022/10/12 21:34
@Author:liaoqin
"""
from selenium.webdriver.remote.webdriver import WebDriver
from locator.index_ketangpai_locator import IndexKeTangPaiLocator
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class IndexKeTangPaiPage:
def __init__(self,driver:WebDriver ):
self.driver = driver

def is_login_success(self):
"""检验登录是否成功"""
try:
res = WebDriverWait(self.driver,5,1).until(
EC.visibility_of_element_located(IndexKeTangPaiLocator.myClass_loc)
)
except:
res = "登录失败"
else:
res = "登录成功"
return res

def join_class(self):
"""点击课堂码,进入课堂"""
ele = WebDriverWait(self.driver,5,1).until(
EC.element_to_be_clickable(IndexKeTangPaiLocator.join_class_link_loc)
)
ele.click()

+ 22
- 0
QCD_webUI/page/index_page.py View File

@@ -0,0 +1,22 @@
"""
coding:utf-8
@Software:
@Time:2022/10/12 11:17
@Author:liaoqin
"""
from selenium.webdriver.remote.webdriver import WebDriver
from locator.index_locator import IndexLocator


class IndexPage:
def __init__(self,driver:WebDriver ):
self.driver = driver

def is_login_success(self):
try:
res = self.driver.find_element(*IndexLocator.myAccount_loc)
except:
res = "登录失败"
else:
res = "登录成功"
return res

+ 24
- 0
QCD_webUI/page/login_ketangpai_page.py View File

@@ -0,0 +1,24 @@
"""
coding:utf-8
@Software:课堂派登录页面
@Time:2022/10/12 21:20
@Author:liaoqin
"""

from selenium.webdriver.remote.webdriver import WebDriver
from locator.login_ketangpai_locator import LoginKeTangPaiLocator

class LoginKeTangPaiPage:
def __init__(self,driver:WebDriver):
self.driver = driver

def login(self,mobile,pwd):
"""登录"""
#1、输入账号
self.driver.find_element(*LoginKeTangPaiLocator.mobile_loc).send_keys(mobile)
# 2、输入密码
self.driver.find_element(*LoginKeTangPaiLocator.pwd_loc).send_keys(pwd)
# 3、点击登录
self.driver.find_element(*LoginKeTangPaiLocator.login_btn_loc).click()
#4、点击不方便扫码
self.driver.find_element(*LoginKeTangPaiLocator.forward_btn_loc).click()

+ 35
- 0
QCD_webUI/page/login_page.py View File

@@ -0,0 +1,35 @@
"""
coding:utf-8
@Software:页面对象类:只写查找元素及操作动作
@Time:2022/10/11 15:08
@Author:liaoqin
"""
from locator.login_locator import LoginLocator
from common.base_page import BasePage


class LoginPage(BasePage):


def login(self,mobile,pwd):
"""登录"""
# 1、输入账号
# self.driver.find_element(*LoginLocator.mobile_loc).send_keys(mobile)
self.get_element(LoginLocator.mobile_loc,"登录页面_账号输入框").send_keys(mobile)
# 2、输入密码
# self.driver.find_element(*LoginLocator.pwd_loc).send_keys(pwd)
self.get_element(LoginLocator.pwd_loc,"登录页面_密码输入框").send_keys(pwd)
# 3、点击登录
# self.driver.find_element(*LoginLocator.login_btn_loc).click()
self.click_element(LoginLocator.login_btn_loc,'登录页面_登录按钮')

def get_error_text(self):
"""获取页面上登录失败错误提示"""
# 加显示等待
res = self.wait_element_visibility(LoginLocator.form_error_info_btn_loc,'登录页面_登录失败错误提示')
return res.text

def get_alert_info(self):
"""获取登录失败弹框提示"""
res = self.wait_element_visibility(LoginLocator.layui_layer_content_loc,'登录页面_登录失败弹框提示')
return res.text

+ 1
- 0
QCD_webUI/reports/01d064f2-ca2e-4c13-8c5e-8ea708799805-container.json View File

@@ -0,0 +1 @@
{"uuid": "c0a962d1-31a4-4f80-b150-46016899b58b", "befores": [{"name": "case", "status": "passed", "start": 1667286762515, "stop": 1667286762515}], "start": 1667286762515, "stop": 1667286767009}

+ 1
- 0
QCD_webUI/reports/03f759f1-7d00-4aae-ba8b-79aaada7d3aa-result.json View File

@@ -0,0 +1 @@
{"name": "test_login_alert_fail[case0]", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'", "trace": "@pytest.fixture(scope=\"function\")\n def login_fixture():\n #用例前置\n> driver = webdriver.Chrome(is_headers=False)\nE TypeError: __init__() got an unexpected keyword argument 'is_headers'\n\ntestcases\\conftest.py:41: TypeError"}, "description": "登录失败--此账号没有经过授权,请联系管理员!", "parameters": [{"name": "case", "value": "{'mobile': '18611458781', 'pwd': '111', 'expected': '此账号没有经过授权,请联系管理员!'}"}], "start": 1667286647796, "stop": 1667286647796, "uuid": "fef195c9-8f7e-4cd8-b49e-37741b08e823", "historyId": "79906ae4b91b185b0ea29785301e04ac", "testCaseId": "8b848752bf4ac3b5ac7d380bf9668e8d", "fullName": "testcases.test_login_ddt.TestLogin#test_login_alert_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "18384-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 8
- 0
QCD_webUI/reports/04d158ac-e511-4e34-a2d4-7f044ae10886-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败弹框提示】--成功
INFO test_log:test_login_ddt.py:79 【此账号没有经过授权,请联系管理员!--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/05165ac1-4fc4-4391-9f9b-b05c4f2235c1-container.json View File

@@ -0,0 +1 @@
{"uuid": "85a011bb-eab6-40de-be30-7496d6860edb", "befores": [{"name": "case", "status": "passed", "start": 1667205221196, "stop": 1667205221197}], "start": 1667205221196, "stop": 1667205227872}

+ 1
- 0
QCD_webUI/reports/07f006df-00d5-4253-9efb-de010c2bd185-container.json View File

@@ -0,0 +1 @@
{"uuid": "f35c8b3c-b3a3-48f9-83ce-49a4288912d8", "befores": [{"name": "case", "status": "passed", "start": 1667205227875, "stop": 1667205227875}], "start": 1667205227875, "stop": 1667205233940}

+ 1
- 0
QCD_webUI/reports/0969b68d-6081-4554-821c-72682cdd1791-container.json View File

@@ -0,0 +1 @@
{"uuid": "139d106d-c2b8-4391-acac-1fdc5ebaeca5", "befores": [{"name": "case", "status": "passed", "start": 1667286767012, "stop": 1667286767012}], "start": 1667286767012, "stop": 1667286772205}

+ 1
- 0
QCD_webUI/reports/09cfa742-38dd-477c-a779-d1f0cb23cd67-result.json View File

@@ -0,0 +1 @@
{"name": "请输入正确的手机号", "status": "passed", "description": "登录失败--此账号没有经过授权,请联系管理员!", "attachments": [{"name": "log", "source": "2453cb86-9621-4fef-bb97-27b9092e820e-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "71cbe848-56dd-4356-8c32-0ec65c4096f9-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': '186', 'pwd': '111', 'expected': '请输入正确的手机号'}"}], "start": 1667205225348, "stop": 1667205225690, "uuid": "e10d289e-92fd-4fca-84f8-058553aba7c0", "historyId": "8ab3a0b6e9c809f712f35a72c445b2da", "testCaseId": "007630122853f6ac4ea2f284b8c09793", "fullName": "testcases.test_login_ddt.TestLogin#test_login_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "15068-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/0bc20a53-93e1-4177-8737-306fb1869a2a-container.json View File

@@ -0,0 +1 @@
{"uuid": "5b134127-75b3-493f-ad51-1f4cb239c938", "befores": [{"name": "case", "status": "passed", "start": 1667286647707, "stop": 1667286647707}], "start": 1667286647707, "stop": 1667286647759}

+ 1
- 0
QCD_webUI/reports/0c2757d6-34f0-4ab3-8b2a-911437c575eb-result.json View File

@@ -0,0 +1 @@
{"name": "请输入正确的手机号", "status": "passed", "description": "登录失败--此账号没有经过授权,请联系管理员!", "attachments": [{"name": "log", "source": "23feab0c-0501-41f2-abaf-1bd0fdd2fe6e-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "8da5dc98-5dfb-4ed8-a15d-a1aa97d9cee7-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': 'wqeq', 'pwd': '111', 'expected': '请输入正确的手机号'}"}], "start": 1667286816900, "stop": 1667286817106, "uuid": "983dfb39-3f15-415e-8bc0-f15681384a93", "historyId": "815b0c5e2b778516245092332f3043a4", "testCaseId": "007630122853f6ac4ea2f284b8c09793", "fullName": "testcases.test_login_ddt.TestLogin#test_login_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "17400-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 7
- 0
QCD_webUI/reports/0dff4bb2-dcb8-4c92-bce8-857a5456a971-attachment.txt View File

@@ -0,0 +1,7 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:test_login_ddt.py:36 【登录成功--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/1444bb4c-5194-4009-b640-06cc37570eea-result.json View File

@@ -0,0 +1 @@
{"name": "登录成功", "status": "passed", "description": "登录成功", "attachments": [{"name": "log", "source": "0dff4bb2-dcb8-4c92-bce8-857a5456a971-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "46719b61-de72-4598-8478-7b97305d2358-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': '18684720553', 'pwd': 'python', 'expected': '登录成功'}"}], "start": 1667205215394, "stop": 1667205218971, "uuid": "882d85e0-c201-46d4-876f-6300441b9cbb", "historyId": "6284ae4c3adb54a796d0c3e86b808086", "testCaseId": "4f4e1a9d30341c741830d94fdf6be8df", "fullName": "testcases.test_login_ddt.TestLogin#test_login_success", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "15068-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/1509452e-53ef-4bed-a13a-ea78553f251a-container.json View File

@@ -0,0 +1 @@
{"uuid": "6354b277-d834-4ef6-a0a7-1098812c86a7", "children": ["fef195c9-8f7e-4cd8-b49e-37741b08e823"], "befores": [{"name": "login_fixture", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'\n", "trace": " File \"D:\\program\\python37\\lib\\site-packages\\pluggy\\_callers.py\", line 39, in _multicall\n res = hook_impl.function(*args)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 1111, in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 883, in call_fixture_func\n fixture_result = next(generator)\n File \"D:\\pythonProject\\QCD_webUI\\testcases\\conftest.py\", line 41, in login_fixture\n driver = webdriver.Chrome(is_headers=False)\n"}, "start": 1667286647797, "stop": 1667286647797}], "start": 1667286647797, "stop": 1667286647804}

+ 1
- 0
QCD_webUI/reports/157721fd-2dad-498a-bde3-db9a5b9752ac-result.json View File

@@ -0,0 +1 @@
{"name": "test_login_success[case0]", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'", "trace": "@pytest.fixture(scope=\"function\")\n def login_fixture():\n #用例前置\n> driver = webdriver.Chrome(is_headers=False)\nE TypeError: __init__() got an unexpected keyword argument 'is_headers'\n\ntestcases\\conftest.py:40: TypeError"}, "description": "登录成功", "parameters": [{"name": "case", "value": "{'mobile': '18684720553', 'pwd': 'python', 'expected': '登录成功'}"}], "start": 1667286724052, "stop": 1667286724052, "uuid": "6c700aa0-65bf-4386-9ad4-b47576bcb4a9", "historyId": "6284ae4c3adb54a796d0c3e86b808086", "testCaseId": "4f4e1a9d30341c741830d94fdf6be8df", "fullName": "testcases.test_login_ddt.TestLogin#test_login_success", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "4084-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 8
- 0
QCD_webUI/reports/15c60f0f-9290-4fc8-ab26-ff2bbb79e2df-attachment.txt View File

@@ -0,0 +1,8 @@
2022-10-31 16:33:50,180 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:33:50,180 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:33:50,365 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:33:50,366 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:33:50,552 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:33:50,626 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:33:50,659 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-31 16:33:50,679 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功

+ 8
- 0
QCD_webUI/reports/162600d3-04fb-4fd0-a7ca-9d1e9b558d4b-attachment.txt View File

@@ -0,0 +1,8 @@
2022-10-31 16:34:02,659 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:34:02,660 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:34:02,822 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:34:02,822 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:34:02,955 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:34:03,029 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:34:03,662 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败弹框提示】--成功
2022-10-31 16:34:03,677 - [test_login_ddt.py-->line:79] - INFO :【此账号没有经过授权,请联系管理员!--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/176e0aa1-5ff1-4de6-a768-73a866eed1f1-container.json View File

@@ -0,0 +1 @@
{"uuid": "dec544ba-f965-4afb-887c-9204b9bc1427", "children": ["75a19b11-cac6-4105-88b0-9dae206876c6"], "befores": [{"name": "login_fixture", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'\n", "trace": " File \"D:\\program\\python37\\lib\\site-packages\\pluggy\\_callers.py\", line 39, in _multicall\n res = hook_impl.function(*args)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 1111, in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 883, in call_fixture_func\n fixture_result = next(generator)\n File \"D:\\pythonProject\\QCD_webUI\\testcases\\conftest.py\", line 40, in login_fixture\n driver = webdriver.Chrome(is_headers=False)\n"}, "start": 1667286724107, "stop": 1667286724107}], "start": 1667286724107, "stop": 1667286724113}

+ 1
- 0
QCD_webUI/reports/1966afaa-d9d7-44b8-9fc7-d0ea38e15f03-container.json View File

@@ -0,0 +1 @@
{"uuid": "4ac81760-4ccd-4955-bd87-ae88ac843c86", "befores": [{"name": "case", "status": "passed", "start": 1667205240056, "stop": 1667205240056}], "start": 1667205240056, "stop": 1667205245829}

+ 8
- 0
QCD_webUI/reports/197451a0-f98f-4d27-bb5b-c4041f7af1fa-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败错误提示】--成功
INFO test_log:test_login_ddt.py:58 【请输入正确的手机号--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/19f3801e-86cc-4a10-b20c-9f56e5beae32-result.json View File

@@ -0,0 +1 @@
{"name": "test_login_fail[case2]", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'", "trace": "@pytest.fixture(scope=\"function\")\n def login_fixture():\n #用例前置\n> driver = webdriver.Chrome(is_headers=False)\nE TypeError: __init__() got an unexpected keyword argument 'is_headers'\n\ntestcases\\conftest.py:40: TypeError"}, "description": "登录失败--此账号没有经过授权,请联系管理员!", "parameters": [{"name": "case", "value": "{'mobile': 'wqeq', 'pwd': '111', 'expected': '请输入正确的手机号'}"}], "start": 1667286724098, "stop": 1667286724098, "uuid": "f862a0f9-9e69-4464-8d6b-5b8585b8a1ef", "historyId": "815b0c5e2b778516245092332f3043a4", "testCaseId": "007630122853f6ac4ea2f284b8c09793", "fullName": "testcases.test_login_ddt.TestLogin#test_login_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "4084-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/1aaadf4c-6e5a-429f-91ad-e5e91c4db36d-container.json View File

@@ -0,0 +1 @@
{"uuid": "f29517fe-da96-45b2-b4db-f1365128f9fa", "children": ["f862a0f9-9e69-4464-8d6b-5b8585b8a1ef"], "befores": [{"name": "login_fixture", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'\n", "trace": " File \"D:\\program\\python37\\lib\\site-packages\\pluggy\\_callers.py\", line 39, in _multicall\n res = hook_impl.function(*args)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 1111, in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 883, in call_fixture_func\n fixture_result = next(generator)\n File \"D:\\pythonProject\\QCD_webUI\\testcases\\conftest.py\", line 40, in login_fixture\n driver = webdriver.Chrome(is_headers=False)\n"}, "start": 1667286724099, "stop": 1667286724099}], "start": 1667286724099, "stop": 1667286724105}

+ 7
- 0
QCD_webUI/reports/1d972c78-f860-4c70-993f-096b70fbb83f-attachment.txt View File

@@ -0,0 +1,7 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:test_login_ddt.py:36 【登录成功--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/1de5e00b-d55d-47ae-b489-f2f1c2a3d623-container.json View File

@@ -0,0 +1 @@
{"uuid": "7b1f67ae-dbb1-4f4f-a4b1-f2151a05447f", "befores": [{"name": "case", "status": "passed", "start": 1667286724107, "stop": 1667286724107}], "start": 1667286724107, "stop": 1667286724114}

+ 1
- 0
QCD_webUI/reports/1fa14c54-61b0-4319-b080-a009d4ee128f-container.json View File

@@ -0,0 +1 @@
{"uuid": "2c130e5e-df0b-4c29-b926-8060389b4d40", "befores": [{"name": "case", "status": "passed", "start": 1667286752421, "stop": 1667286752421}], "start": 1667286752421, "stop": 1667286757692}

+ 1
- 0
QCD_webUI/reports/20dd5d58-6169-4321-aac9-26a1142f81da-result.json View File

@@ -0,0 +1 @@
{"name": "此账号没有经过授权,请联系管理员!", "status": "passed", "description": "登录失败--此账号没有经过授权,请联系管理员!", "attachments": [{"name": "log", "source": "a1044d7d-00e0-4364-b644-772518e4eaae-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "fdf6c1d9-44e6-4f10-91e1-4a65c26b2ef5-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': '18611458781', 'pwd': '111', 'expected': '此账号没有经过授权,请联系管理员!'}"}], "start": 1667286821860, "stop": 1667286822179, "uuid": "41c3bc8f-cc6b-4f67-9101-e2dc2397ab5d", "historyId": "79906ae4b91b185b0ea29785301e04ac", "testCaseId": "8b848752bf4ac3b5ac7d380bf9668e8d", "fullName": "testcases.test_login_ddt.TestLogin#test_login_alert_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "17400-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 8
- 0
QCD_webUI/reports/23feab0c-0501-41f2-abaf-1bd0fdd2fe6e-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败错误提示】--成功
INFO test_log:test_login_ddt.py:58 【请输入正确的手机号--用例】------》执行成功

+ 8
- 0
QCD_webUI/reports/2453cb86-9621-4fef-bb97-27b9092e820e-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败错误提示】--成功
INFO test_log:test_login_ddt.py:58 【请输入正确的手机号--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/261d33f7-d871-4698-bded-df64744f1149-container.json View File

@@ -0,0 +1 @@
{"uuid": "7710be85-c3b1-4eea-a230-53dd26b94178", "befores": [{"name": "case", "status": "passed", "start": 1667286647797, "stop": 1667286647797}], "start": 1667286647797, "stop": 1667286647804}

+ 1
- 0
QCD_webUI/reports/2bdfa2ec-6f26-471c-953f-22bcacf1a5c7-container.json View File

@@ -0,0 +1 @@
{"uuid": "0a152b93-2dd2-407d-a961-91b85e6be52e", "befores": [{"name": "case", "status": "passed", "start": 1667286802553, "stop": 1667286802553}], "start": 1667286802553, "stop": 1667286807190}

+ 1
- 0
QCD_webUI/reports/2ce82035-cfa5-45bc-8770-8ebd1761745d-container.json View File

@@ -0,0 +1 @@
{"uuid": "2498c9a7-fde0-4d01-99bf-bf8253412a68", "children": ["c44e51c8-605c-41af-a36e-5bcad2a5e39e"], "befores": [{"name": "login_fixture", "status": "passed", "start": 1667286807194, "stop": 1667286808956}], "afters": [{"name": "login_fixture::0", "status": "passed", "start": 1667286809157, "stop": 1667286811200}], "start": 1667286807194, "stop": 1667286811200}

+ 8
- 0
QCD_webUI/reports/300cdbf3-6daf-4818-8143-1fbb6e526449-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败错误提示】--成功
INFO test_log:test_login_ddt.py:58 【请输入正确的手机号--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/324588a2-9e1a-4f58-97fe-5f141b64ce04-container.json View File

@@ -0,0 +1 @@
{"uuid": "4d87b2f7-867f-4c7d-8297-8e5308fe31fa", "befores": [{"name": "case", "status": "passed", "start": 1667205211405, "stop": 1667205211405}], "start": 1667205211405, "stop": 1667205221192}

+ 1
- 0
QCD_webUI/reports/37d454a2-780d-4a85-b7d6-61ec4cc08635-container.json View File

@@ -0,0 +1 @@
{"uuid": "f0940343-09f0-4c2c-8cf6-da59e72d250e", "children": ["f48b0fdf-272f-47e2-819d-f2ed61e914ed"], "befores": [{"name": "login_fixture", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'\n", "trace": " File \"D:\\program\\python37\\lib\\site-packages\\pluggy\\_callers.py\", line 39, in _multicall\n res = hook_impl.function(*args)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 1111, in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 883, in call_fixture_func\n fixture_result = next(generator)\n File \"D:\\pythonProject\\QCD_webUI\\testcases\\conftest.py\", line 40, in login_fixture\n driver = webdriver.Chrome(is_headers=False)\n"}, "start": 1667286724082, "stop": 1667286724082}], "start": 1667286724082, "stop": 1667286724087}

+ 8
- 0
QCD_webUI/reports/394ace3e-fb1f-4adf-8ae9-9f5875f1e695-attachment.txt View File

@@ -0,0 +1,8 @@
2022-10-31 16:33:56,669 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:33:56,671 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:33:56,860 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:33:56,861 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:33:57,674 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:33:57,745 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:33:57,797 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-31 16:33:57,820 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/3d381565-f84d-48d7-b8fb-a85d1f9135f3-result.json View File

@@ -0,0 +1 @@
{"name": "此账号没有经过授权,请联系管理员!", "status": "passed", "description": "登录失败--此账号没有经过授权,请联系管理员!", "attachments": [{"name": "log", "source": "04d158ac-e511-4e34-a2d4-7f044ae10886-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "162600d3-04fb-4fd0-a7ca-9d1e9b558d4b-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': '18611458781', 'pwd': '111', 'expected': '此账号没有经过授权,请联系管理员!'}"}], "start": 1667205242548, "stop": 1667205243678, "uuid": "0f17bc02-6527-4de6-bef3-c5143bd895e9", "historyId": "79906ae4b91b185b0ea29785301e04ac", "testCaseId": "8b848752bf4ac3b5ac7d380bf9668e8d", "fullName": "testcases.test_login_ddt.TestLogin#test_login_alert_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "15068-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/3d830fd2-d4af-4ff1-8b63-ef9033629da6-result.json View File

@@ -0,0 +1 @@
{"name": "请输入正确的手机号", "status": "passed", "description": "登录失败--此账号没有经过授权,请联系管理员!", "attachments": [{"name": "log", "source": "b8124d29-c139-427a-ac38-d81c6670a426-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "15c60f0f-9290-4fc8-ab26-ff2bbb79e2df-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': '1860045454545', 'pwd': '11', 'expected': '请输入正确的手机号'}"}], "start": 1667205230127, "stop": 1667205230680, "uuid": "6fac8052-b981-4294-ba3e-f5062f254797", "historyId": "b08c09670a5469b7779fdc0ff9f3ae6b", "testCaseId": "007630122853f6ac4ea2f284b8c09793", "fullName": "testcases.test_login_ddt.TestLogin#test_login_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "15068-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/3f04f716-7661-4e75-a0d2-d9b3b48abb86-container.json View File

@@ -0,0 +1 @@
{"uuid": "52686328-6328-4e00-9959-38f693315eb6", "children": ["41c3bc8f-cc6b-4f67-9101-e2dc2397ab5d"], "befores": [{"name": "login_fixture", "status": "passed", "start": 1667286820163, "stop": 1667286821859}], "afters": [{"name": "login_fixture::0", "status": "passed", "start": 1667286822179, "stop": 1667286824221}], "start": 1667286820163, "stop": 1667286824221}

+ 8
- 0
QCD_webUI/reports/41eb2c1d-3082-4996-8014-6a90c82bdbc1-attachment.txt View File

@@ -0,0 +1,8 @@
2022-11-01 15:12:49,058 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:12:49,059 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:12:49,207 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:12:49,207 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:12:49,332 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:12:49,400 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:12:50,010 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败弹框提示】--成功
2022-11-01 15:12:50,022 - [test_login_ddt.py-->line:79] - INFO :【此账号没有经过授权,请联系管理员!--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/46566d03-eb45-443c-ad54-4cae2666ca01-result.json View File

@@ -0,0 +1 @@
{"name": "test_login_success[case0]", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'", "trace": "@pytest.fixture(scope=\"function\")\n def login_fixture():\n #用例前置\n> driver = webdriver.Chrome(is_headers=False)\nE TypeError: __init__() got an unexpected keyword argument 'is_headers'\n\ntestcases\\conftest.py:41: TypeError"}, "description": "登录成功", "parameters": [{"name": "case", "value": "{'mobile': '18684720553', 'pwd': 'python', 'expected': '登录成功'}"}], "start": 1667286647706, "stop": 1667286647706, "uuid": "c9ad2f41-e678-46b9-a873-0c92e4ee3c9a", "historyId": "6284ae4c3adb54a796d0c3e86b808086", "testCaseId": "4f4e1a9d30341c741830d94fdf6be8df", "fullName": "testcases.test_login_ddt.TestLogin#test_login_success", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "18384-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 7
- 0
QCD_webUI/reports/46719b61-de72-4598-8478-7b97305d2358-attachment.txt View File

@@ -0,0 +1,7 @@
2022-10-31 16:33:35,543 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:33:35,544 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:33:35,715 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:33:35,716 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:33:35,925 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:33:36,003 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:33:38,970 - [test_login_ddt.py-->line:36] - INFO :【登录成功--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/476cc067-f801-40dd-9999-f75c34594424-container.json View File

@@ -0,0 +1 @@
{"uuid": "234ab8f2-f421-46b3-b696-10241a59e72a", "children": ["c9ad2f41-e678-46b9-a873-0c92e4ee3c9a"], "befores": [{"name": "login_fixture", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'\n", "trace": " File \"D:\\program\\python37\\lib\\site-packages\\pluggy\\_callers.py\", line 39, in _multicall\n res = hook_impl.function(*args)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 1111, in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 883, in call_fixture_func\n fixture_result = next(generator)\n File \"D:\\pythonProject\\QCD_webUI\\testcases\\conftest.py\", line 41, in login_fixture\n driver = webdriver.Chrome(is_headers=False)\n"}, "start": 1667286647707, "stop": 1667286647707}], "start": 1667286647707, "stop": 1667286647758}

+ 1
- 0
QCD_webUI/reports/48beff1f-d2b8-46e2-965d-2ae6d7e50a62-container.json View File

@@ -0,0 +1 @@
{"uuid": "ba0aa11f-356c-4be1-a205-5a5de656c926", "children": ["92304f5e-4851-4b86-82d2-70ac46dc0458"], "befores": [{"name": "login_fixture", "status": "passed", "start": 1667286802553, "stop": 1667286804238}], "afters": [{"name": "login_fixture::0", "status": "passed", "start": 1667286805140, "stop": 1667286807189}], "start": 1667286802553, "stop": 1667286807189}

+ 1
- 0
QCD_webUI/reports/498b3278-f127-4940-864c-c3a11570408d-result.json View File

@@ -0,0 +1 @@
{"name": "请输入正确的手机号", "status": "passed", "description": "登录失败--此账号没有经过授权,请联系管理员!", "attachments": [{"name": "log", "source": "777ffa41-204c-44a4-911e-3d8a42124148-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "a8e51bf3-50ff-40e2-a77b-6ca08d9ed7fd-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': 'wqeq', 'pwd': '111', 'expected': '请输入正确的手机号'}"}], "start": 1667286764412, "stop": 1667286764834, "uuid": "1e6bfc23-6c2e-45a3-9e5a-496226811d66", "historyId": "815b0c5e2b778516245092332f3043a4", "testCaseId": "007630122853f6ac4ea2f284b8c09793", "fullName": "testcases.test_login_ddt.TestLogin#test_login_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "8028-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/4a00595a-bc02-4926-bfde-e92439b4a49a-container.json View File

@@ -0,0 +1 @@
{"uuid": "30d32947-39c4-456c-b7d8-4fc72833c27f", "befores": [{"name": "case", "status": "passed", "start": 1667286745971, "stop": 1667286745971}], "start": 1667286745971, "stop": 1667286752417}

+ 1
- 0
QCD_webUI/reports/4feac40f-e48a-4a73-82fb-a5733cdc6df3-container.json View File

@@ -0,0 +1 @@
{"uuid": "d15c4ad6-5aa8-4679-afea-86a16bd9982f", "befores": [{"name": "case", "status": "passed", "start": 1667286647773, "stop": 1667286647773}], "start": 1667286647773, "stop": 1667286647782}

+ 1
- 0
QCD_webUI/reports/50a38208-ba12-4dd4-b718-a90241df32b4-container.json View File

@@ -0,0 +1 @@
{"uuid": "78f1cafc-6074-4c5c-ad9f-6914e258ec7a", "befores": [{"name": "case", "status": "passed", "start": 1667286757696, "stop": 1667286757696}], "start": 1667286757696, "stop": 1667286762512}

+ 7
- 0
QCD_webUI/reports/55523684-86f9-4ca9-bece-58222f40b8eb-attachment.txt View File

@@ -0,0 +1,7 @@
2022-11-01 15:12:28,672 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:12:28,672 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:12:28,864 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:12:28,864 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:12:29,015 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:12:29,090 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:12:30,151 - [test_login_ddt.py-->line:36] - INFO :【登录成功--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/5735c8aa-66de-4767-a2b5-43b5c249e510-result.json View File

@@ -0,0 +1 @@
{"name": "请输入正确的手机号", "status": "passed", "description": "登录失败--此账号没有经过授权,请联系管理员!", "attachments": [{"name": "log", "source": "300cdbf3-6daf-4818-8143-1fbb6e526449-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "394ace3e-fb1f-4adf-8ae9-9f5875f1e695-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': 'wqeq', 'pwd': '111', 'expected': '请输入正确的手机号'}"}], "start": 1667205236569, "stop": 1667205237822, "uuid": "23e8f28f-9f72-444c-8818-740e554432ec", "historyId": "815b0c5e2b778516245092332f3043a4", "testCaseId": "007630122853f6ac4ea2f284b8c09793", "fullName": "testcases.test_login_ddt.TestLogin#test_login_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "15068-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/5a2dae10-1359-4181-9e2a-45eb681120ce-container.json View File

@@ -0,0 +1 @@
{"uuid": "5ef0c62b-723f-4815-976f-076bc609b887", "befores": [{"name": "case", "status": "passed", "start": 1667286815148, "stop": 1667286815148}], "start": 1667286815148, "stop": 1667286820158}

+ 1
- 0
QCD_webUI/reports/5fa247f3-4b8a-4aea-ad0b-b902f01def6e-container.json View File

@@ -0,0 +1 @@
{"uuid": "ff3451bc-f21d-44f0-b434-870098bdb6f8", "children": ["23e8f28f-9f72-444c-8818-740e554432ec"], "befores": [{"name": "login_fixture", "status": "passed", "start": 1667205233944, "stop": 1667205236567}], "afters": [{"name": "login_fixture::0", "status": "passed", "start": 1667205237822, "stop": 1667205240045}], "start": 1667205233944, "stop": 1667205240045}

+ 8
- 0
QCD_webUI/reports/65acbf0b-0784-4837-9f4f-86f3dee016fe-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败错误提示】--成功
INFO test_log:test_login_ddt.py:58 【请输入正确的手机号--用例】------》执行成功

+ 8
- 0
QCD_webUI/reports/6e05471b-3c42-4e2d-8f16-99b671f3e2b6-attachment.txt View File

@@ -0,0 +1,8 @@
2022-11-01 15:13:32,904 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:13:32,905 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:13:32,966 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:13:32,967 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:13:33,033 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:13:33,063 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:13:33,080 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:13:33,095 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/6f95a47b-2e04-48e5-bfdb-e5234e0e8d34-container.json View File

@@ -0,0 +1 @@
{"uuid": "6a2151df-27c5-433a-99cd-034a232a8277", "children": ["714393c1-f4b6-4e32-8e2f-c254a612da95"], "befores": [{"name": "login_fixture", "status": "passed", "start": 1667286757696, "stop": 1667286759920}], "afters": [{"name": "login_fixture::0", "status": "passed", "start": 1667286760326, "stop": 1667286762511}], "start": 1667286757696, "stop": 1667286762511}

+ 8
- 0
QCD_webUI/reports/7072465e-a68d-49eb-88f7-a72fda417efc-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败错误提示】--成功
INFO test_log:test_login_ddt.py:58 【请输入正确的手机号--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/70d58884-776c-4210-889d-ec4629c23e05-result.json View File

@@ -0,0 +1 @@
{"name": "请输入正确的手机号", "status": "passed", "description": "登录失败--此账号没有经过授权,请联系管理员!", "attachments": [{"name": "log", "source": "197451a0-f98f-4d27-bb5b-c4041f7af1fa-attachment.txt", "type": "text/plain"}, {"name": "stderr", "source": "6e05471b-3c42-4e2d-8f16-99b671f3e2b6-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "case", "value": "{'mobile': '1860045454545', 'pwd': '11', 'expected': '请输入正确的手机号'}"}], "start": 1667286812885, "stop": 1667286813096, "uuid": "692c5b93-4519-44c2-8be9-435eea0cb104", "historyId": "b08c09670a5469b7779fdc0ff9f3ae6b", "testCaseId": "007630122853f6ac4ea2f284b8c09793", "fullName": "testcases.test_login_ddt.TestLogin#test_login_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "17400-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/71a0b9fe-d2f4-43a9-be37-d90ee4e4c617-container.json View File

@@ -0,0 +1 @@
{"uuid": "84703254-66c3-44b2-985c-fdd0457f465b", "children": ["e10d289e-92fd-4fca-84f8-058553aba7c0"], "befores": [{"name": "login_fixture", "status": "passed", "start": 1667205221197, "stop": 1667205225347}], "afters": [{"name": "login_fixture::0", "status": "passed", "start": 1667205225691, "stop": 1667205227871}], "start": 1667205221197, "stop": 1667205227871}

+ 8
- 0
QCD_webUI/reports/71cbe848-56dd-4356-8c32-0ec65c4096f9-attachment.txt View File

@@ -0,0 +1,8 @@
2022-10-31 16:33:45,378 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-10-31 16:33:45,378 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-10-31 16:33:45,467 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-10-31 16:33:45,468 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-10-31 16:33:45,592 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-10-31 16:33:45,639 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-10-31 16:33:45,669 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-10-31 16:33:45,689 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功

+ 8
- 0
QCD_webUI/reports/777ffa41-204c-44a4-911e-3d8a42124148-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败错误提示】--成功
INFO test_log:test_login_ddt.py:58 【请输入正确的手机号--用例】------》执行成功

+ 8
- 0
QCD_webUI/reports/7b0ee1a5-8ff1-42a6-a998-fb3308ceec14-attachment.txt View File

@@ -0,0 +1,8 @@
INFO test_log:base_page.py:174 等待元素可见--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_账号输入框】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:43 查找元素--【登录页面_密码输入框】--成功
INFO test_log:base_page.py:214 等待元素可见--【None】--成功
INFO test_log:base_page.py:62 点击元素--【登录页面_登录按钮】--成功
INFO test_log:base_page.py:174 等待元素可见--【登录页面_登录失败错误提示】--成功
INFO test_log:test_login_ddt.py:58 【请输入正确的手机号--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/8b5ea7f7-c6aa-4631-b458-3119f7cb904c-container.json View File

@@ -0,0 +1 @@
{"uuid": "25ded4a7-6e0e-4d02-a393-22bb8c0ef74d", "children": ["4e41fe6e-c15b-4c7d-a171-09a8cad0388a"], "befores": [{"name": "login_fixture", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'\n", "trace": " File \"D:\\program\\python37\\lib\\site-packages\\pluggy\\_callers.py\", line 39, in _multicall\n res = hook_impl.function(*args)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 1111, in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 883, in call_fixture_func\n fixture_result = next(generator)\n File \"D:\\pythonProject\\QCD_webUI\\testcases\\conftest.py\", line 41, in login_fixture\n driver = webdriver.Chrome(is_headers=False)\n"}, "start": 1667286647774, "stop": 1667286647774}], "start": 1667286647774, "stop": 1667286647782}

+ 8
- 0
QCD_webUI/reports/8d9e11a8-fcf1-49eb-9e58-7e3206be0bbb-attachment.txt View File

@@ -0,0 +1,8 @@
2022-11-01 15:12:34,941 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:12:34,942 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:12:35,091 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:12:35,092 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:12:35,262 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:12:35,318 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:12:35,350 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:12:35,374 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功

+ 8
- 0
QCD_webUI/reports/8da5dc98-5dfb-4ed8-a15d-a1aa97d9cee7-attachment.txt View File

@@ -0,0 +1,8 @@
2022-11-01 15:13:36,922 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_账号输入框】--成功
2022-11-01 15:13:36,923 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_账号输入框】--成功
2022-11-01 15:13:36,981 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_密码输入框】--成功
2022-11-01 15:13:36,981 - [base_page.py-->line:43] - INFO :查找元素--【登录页面_密码输入框】--成功
2022-11-01 15:13:37,047 - [base_page.py-->line:214] - INFO :等待元素可见--【None】--成功
2022-11-01 15:13:37,077 - [base_page.py-->line:62] - INFO :点击元素--【登录页面_登录按钮】--成功
2022-11-01 15:13:37,094 - [base_page.py-->line:174] - INFO :等待元素可见--【登录页面_登录失败错误提示】--成功
2022-11-01 15:13:37,105 - [test_login_ddt.py-->line:58] - INFO :【请输入正确的手机号--用例】------》执行成功

+ 1
- 0
QCD_webUI/reports/8da689fd-dae2-4c33-be68-3374b107a36c-result.json View File

@@ -0,0 +1 @@
{"name": "test_login_fail[case2]", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'", "trace": "@pytest.fixture(scope=\"function\")\n def login_fixture():\n #用例前置\n> driver = webdriver.Chrome(is_headers=False)\nE TypeError: __init__() got an unexpected keyword argument 'is_headers'\n\ntestcases\\conftest.py:41: TypeError"}, "description": "登录失败--此账号没有经过授权,请联系管理员!", "parameters": [{"name": "case", "value": "{'mobile': 'wqeq', 'pwd': '111', 'expected': '请输入正确的手机号'}"}], "start": 1667286647784, "stop": 1667286647784, "uuid": "c8f85ea2-6f93-4bf6-a9e6-4c189da3f5d6", "historyId": "815b0c5e2b778516245092332f3043a4", "testCaseId": "007630122853f6ac4ea2f284b8c09793", "fullName": "testcases.test_login_ddt.TestLogin#test_login_fail", "labels": [{"name": "story", "value": "登录功能"}, {"name": "parentSuite", "value": "testcases"}, {"name": "suite", "value": "test_login_ddt"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "LAPTOP-MB1T4SUA"}, {"name": "thread", "value": "18384-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "testcases.test_login_ddt"}]}

+ 1
- 0
QCD_webUI/reports/8eddac95-b3bb-4c63-be01-d0d643059ab7-container.json View File

@@ -0,0 +1 @@
{"uuid": "2e363687-2b8e-460d-a123-06873739f72c", "children": ["5cf9a7cf-6d61-406a-8b8d-79fc1004f895"], "befores": [{"name": "login_fixture", "status": "broken", "statusDetails": {"message": "TypeError: __init__() got an unexpected keyword argument 'is_headers'\n", "trace": " File \"D:\\program\\python37\\lib\\site-packages\\pluggy\\_callers.py\", line 39, in _multicall\n res = hook_impl.function(*args)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 1111, in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n File \"D:\\program\\python37\\lib\\site-packages\\_pytest\\fixtures.py\", line 883, in call_fixture_func\n fixture_result = next(generator)\n File \"D:\\pythonProject\\QCD_webUI\\testcases\\conftest.py\", line 41, in login_fixture\n driver = webdriver.Chrome(is_headers=False)\n"}, "start": 1667286647764, "stop": 1667286647764}], "start": 1667286647764, "stop": 1667286647771}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save