所需E币: 0
时间: 2023-12-16 12:41
大小: 4.12KB
一站式通关CKA证书-Kubernetes管理员认证(CKA)-Kubernetes管理员认证(CKA)计划的目的是提供CKA管理员具有执行Kubernetes管理员职责的技能﹑知识和能力的保证。这个CKA证书是云原生计算基金会CNCF组织的,比国内的一些含水量很大的证书强太多了。CKA证书是云原生计算基金会CNCF组织的,它考察的是你是否具备足够管理Kubernetes集群的必备知识。考试形式是上机直接在集群上操作,限时3小时,非常考验个人知识的扎实程度和Kubernetes实践经验。无论你上了什么课,考试报名费都是交给CNCF的,证书也是他们发的,只要考上75分,你就能拿到证书,也能学到不少知识。我们的配置文件已经写好了,后续新增的一些配置,都可以写在这个文件里,我们只要按需读取就可以了,那怎么来读取yaml文件中的数据呢?我们在common包下新建一个py文件,叫yaml_config.py,这个文件里会写一些读取配置文件相关的方法。一般在python中读取文件的内容,都是使用open这个方法。file=open("environment.yaml",encoding='utf-8')try: a=file.read() print(a)exceptExceptionase: print(e)finally: file.close()安装好以后我们开始正式写yaml_config中的方法。pyyaml读取了yaml后,会把yaml文件的内容转成python中字典的形式,这样我们就可以很方便的读取其中的某个值了。importyamlclassGetConf: def__init__(self): #withopen的第一个参数填写environment.yaml的绝对路径 withopen("/Users/fengzhaoxi/imooc/code/trading_system_autotest/config/environment.yaml","r")asenv_file: self.env=yaml.load(env_file,Loader=yaml.FullLoader) print(self.env) defget_username_password(self): returnself.env["username"],self.env["password"] if__name__=='__main__': GetConf().get_username_password()第二点:获取到了项目目录,下面我们需要把项目目录跟environment.yaml在项目中的相对路径拼接,拼接成environment.yaml的绝对路径。因为不同操作系统中的文件分隔符是不同的,所以在python中最好不要通过字符串去拼接分隔符,否则换了操作系统去运行可能就会出错,需要使用os.sep来添加分隔符,所以我们写一个方法defsep(path,add_sep_before=False,add_sep_after=False): """ 系统分隔符 Args: path:路径列表,类型为数组 add_sep_before:是否需要在拼接的路径前加一个分隔符 add_sep_after:是否需要在拼接的路径后加一个分隔符 Returns: """ all_path=os.sep.join(path) ifadd_sep_before: all_path=os.sep+all_path ifadd_sep_after: all_path=all_path+os.sep returnall_path我们再回到yaml_config.py,我们获取environment.yaml的绝对路径,就是项目目录加上environment.yaml在项目中的项目目录。最后修改的完整方法如下importyamlfromtoolsimportget_project_path,sepclassGetConf: def__init__(self): project_dir=get_project_path() withopen(project_dir+sep(['config','environment.yaml'],add_sep_before=True),"r")asenv_file: self.env=yaml.load(env_file,Loader=yaml.FullLoader) print(self.env) defget_username_password(self): returnself.env["username"],self.env["password"]if__name__=='__main__': GetConf().get_username_password()备考难度不低,所以相关培训课程都不便宜。如果决心要考,准备一段时间反复看文档、做实验是必须的,CKA的学习曲线很陡峭,它更多靠的是个人自觉和毅力classLeftMenuBase: deflevel_one_menu(self,menu_name): """ 一级菜单 :parammenu_name: :return: """ return"//aside[@class='el-aside']//span[text()='"+menu_name+"']/ancestor::li" deflevel_two_menu(self,menu_name): """ 二级菜单 :parammenu_name: :return: """ return"//aside[@class='el-aside']//span[text()='"+menu_name+"']/ancestor::li[1]"我们来举一个场景的例子,我们之前有个用例,是进入到已买到的宝贝页面,然后依次点击页面上的按钮,比如”全部“、”待付款“、”待发货“、”运输中“等等,我们当时是通过一个list,然后循环来点击。我们也可以通过pytest.mark.parametrize来修改这个用例fromtimeimportsleepimportpytestfrompage.LeftMenuPageimportLeftMenuPagefrompage.LoginPageimportLoginPagefrompage.OrderPageimportOrderPagetab_list=["全部","待付款","待发货","运输中","待确认","待评价"]classTestOrderBuy: @pytest.mark.parametrize("tab",tab_list) deftest_order_buy(self,driver,tab): LoginPage().login(driver,"william") LeftMenuPage().click_level_one_menu(driver,"我的订单") sleep(1) LeftMenuPage().click_level_two_menu(driver,"已买到的宝贝") sleep(2) OrderPage().click_order_tab(driver,tab) sleep(2)我们再来写一个用例,将我们的订单发布参数化fromtimeimportsleepimportpytestfrompage.LoginPageimportLoginPagefrompage.LeftMenuPageimportLeftMenuPagefrompage.GoodsPageimportGoodsPagegoods_info_list=[ { "goods_title":"新增批量商品测试1", "goods_details":"新增商品测试详情1", "goods_num":1, "goods_pic_list":["商品图片一.jpg"], "goods_price":100, "goods_status":"上架", "bottom_button_name":"提交" }, { "goods_title":"新增批量商品测试2", "goods_details":"新增商品测试详情2", "goods_num":2, "goods_pic_list":["商品图片一.jpg"], "goods_price":200, "goods_status":"上架", "bottom_button_name":"提交" }]classTestParametrizeAddGoods: @pytest.mark.parametrize("goods_info",goods_info_list) deftest_parametrize_add_goods(self,driver,goods_info): LoginPage().login(driver,"jay") LeftMenuPage().click_level_one_menu(driver,"产品") sleep(1) LeftMenuPage().click_level_two_menu(driver,"新增二手商品") sleep(2) GoodsPage().add_new_goods( driver, goods_title=goods_info["goods_title"], goods_details=goods_info["goods_details"], goods_num=goods_info["goods_num"], goods_pic_list=goods_info["goods_pic_list"], goods_price=goods_info["goods_price"], goods_status=goods_info["goods_status"], bottom_button_name=goods_info["bottom_button_name"] ) sleep(3)底下我们想要测试用例执行的时候就更新测试进度,存储对应的测试结果我们在common下新建一个py文件叫process_redis,我们把可能的情况都写好fromcommon.toolsimportget_now_timefromcommon.redis_operationimportRedisOperationclassProcess: def__init__(self): self.redis_client=RedisOperation().redis_client self.UI_AUTOTEST_PROCESS="ui_autotest_process" self.FAILED_TESTCASE_NAMES="failed_testcase_names" self.RUNNING_STATUS="running_status" defreset_all(self): #删除所有进度 self.redis_client.delete(self.UI_AUTOTEST_PROCESS) #删除所有失败用例的名称 self.redis_client.delete(self.FAILED_TESTCASE_NAMES) definit_process(self,total): """ 初始化进度,包括总数、成功数、失败数、开始时间,运行状态 :paramtotal: :return: """ self.redis_client.hset(self.UI_AUTOTEST_PROCESS,"total",total) self.redis_client.hset(self.UI_AUTOTEST_PROCESS,"success",0) self.redis_client.hset(self.UI_AUTOTEST_PROCESS,"fail",0) self.redis_client.hset(self.UI_AUTOTEST_PROCESS,"start_time",get_now_time()) self.redis_client.hset(self.UI_AUTOTEST_PROCESS,"end_time","") self.redis_client.set(self.RUNNING_STATUS,1) defupdate_success(self): """ 成功用例个数+1 Returns: """ self.redis_client.hincrby(self.UI_AUTOTEST_PROCESS,"success") defupdate_fail(self): """ 失败用例个数+1 Returns: """ self.redis_client.hincrby(self.UI_AUTOTEST_PROCESS,"fail") definsert_into_fail_testcase_names(self,fail_testcase_name): """ 增加失败用例名称 Returns: """ self.redis_client.lpush(self.FAILED_TESTCASE_NAMES,fail_testcase_name) defget_process(self): """ 获取进度,计算百分比 Returns: """ total,success,fail,_=self.get_result() iftotal==0: return0 else: result="%.1f"%((int(success)+int(fail))/int(total)*100)+"%" returnresult defget_result(self): """ 获取测试结果 Returns: """ total=self.redis_client.hget(self.UI_AUTOTEST_PROCESS,"total") iftotalisNone: total=0 success=self.redis_client.hget(self.UI_AUTOTEST_PROCESS,"success") ifsuccessisNone: success=0 fail=self.redis_client.hget(self.UI_AUTOTEST_PROCESS,"fail") iffailisNone: fail=0 start_time=self.redis_client.hget(self.UI_AUTOTEST_PROCESS,"start_time") ifstart_timeisNone: start_time='-' returntotal,success,fail,start_time defget_fail_testcase_names(self): """ 获取所有失败的用例名称 Returns: """ fail_testcase_names=self.redis_client.lrange(self.FAILED_TESTCASE_NAMES,0,-1) returnfail_testcase_names defwrite_end_time(self): """ 把测试结束时间写入redis Returns: """ self.redis_client.hset(self.UI_AUTOTEST_PROCESS,"end_time",get_now_time()) defwrite_jenkins_build_number(self,build_number): """ 把jenkins执行的build_number写入redis Args: build_number: