通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
env1.yaml
environments:
staging:
base_url: "https://staging.api.com"
test_data:
valid_user:
username: "test_staging@company.com"
password: "Pass123"
production:
base_url: "https://api.com"
test_data:
valid_user:
username: "real_user@company.com"
password: "SecureP@ss"
这个配置文件中,区分了测试环境和生产环境的URL和登录用户名和密码。
env2.yaml
defaults: &defaults
retry_count: 3
log_level: "INFO"
environments:
staging:
<<: *defaults # 继承默认配置
base_url: "https://staging.api.com"
production:
<<: *defaults
base_url: "https://api.com"
log_level: "WARN" # 覆盖默认值
这个配置文件中,区分了测试环境和生产环境的URL以及继承同样的重试次数和log级别。下面来看一个具体的例子
ebuiness.yaml
environments:
java:
base_url: "http://127.0.0.1:8080/ChatGPTEbusiness/jsp/LoginPage.jsp"
credentials:
username: "User0001"
password: "Password@000"
django:
base_url: "http://127.0.0.1:8000/"
credentials:
username: "cindy"
password: "123456"
定义了Java环境的URL和用户名密码以及Django环境的URL和用户名密码。python程序如下。
ebusiness.py
#!/usr/bin/env python
#coding:utf-8
from selenium import webdriver
import unittest, yaml
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
class TestConfig:
def __init__(self, env):
with open('ebuiness.yaml') as f:
self.config = yaml.safe_load(f)['environments'][env]
@property
def java_url(self):
return self.config['base_url']
@property
def java_username(self):
return self.config.get('credentials', {}).get('username')
@property
def java_password(self):
return self.config.get('credentials', {}).get('password')
@property
def django_url(self):
return self.config['base_url']
@property
def django_username(self):
return self.config.get('credentials', {}).get('username')
@property
def django_password(self):
return self.config.get('credentials', {}).get('password') # 修复:改为获取password
class CheckLogin(unittest.TestCase):
def setUp(self):
driver_path = "C:\\Lib\\"
service = Service(executable_path=driver_path + "chromedriver.exe")
options = webdriver.ChromeOptions()
self.driver = webdriver.Chrome(service=service, options=options) # 添加service参数
def login(self,username,password,env,url):
config = TestConfig(env=env)
self.driver.get(config.java_url)
self.driver.find_element(By.NAME,"username").send_keys(username)
self.driver.find_element(By.NAME,"password").send_keys(password)
if env=="java":
self.driver.find_element(By.XPATH,"//*[@id='loginForm']/button").click()
elif env=="django":
self.driver.find_element(By.CLASS_NAME,"form-signin").submit()
else:
print("env "+evn+"is error ")
def test_java_ebusiness(self):
env="java"
config = TestConfig(env)
self.login(config.java_username,config.java_password,env,config.java_url)
def test_django_ebusiness(self):
env="django"
config = TestConfig(env="django")
self.login(config.django_username,config.django_password,env,config.django_url)
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
顾翔凡言:人工智能未来的发展瓶颈在于对知识的更新。唯一不变的是变化,知识发生了变化,人工智能软件能否及时跟进变化,可能阻碍人工智能的使用。