一站式通关CKA证书(完结10章,k8s1.27版本)

荀勗
• 阅读 206

参考资料地址1:https://pan.baidu.com/s/1Gml6a50F4DU8uWfoRqa--g 提取码: qczi 参考资料地址2:https://share.weiyun.com/2pn97By4 密码:c58ghh

一站式通关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) except Exception as e: print(e) finally: file.close() 安装好以后我们开始正式写yaml_config中的方法。pyyaml读取了yaml后,会把yaml文件的内容转成python中字典的形式,这样我们就可以很方便的读取其中的某个值了。 import yaml

class GetConf: def init(self): #with open的第一个参数填写environment.yaml的绝对路径 with open("/Users/fengzhaoxi/imooc/code/trading_system_autotest/config/environment.yaml", "r") as env_file: self.env = yaml.load(env_file, Loader=yaml.FullLoader) print(self.env)

def get_username_password(self):
    return self.env["username"], self.env["password"]

if name == 'main': GetConf().get_username_password() 第二点:获取到了项目目录,下面我们需要把项目目录跟environment.yaml在项目中的相对路径拼接,拼接成environment.yaml的绝对路径。因为不同操作系统中的文件分隔符是不同的,所以在python中最好不要通过字符串去拼接分隔符,否则换了操作系统去运行可能就会出错,需要使用os.sep来添加分隔符,所以我们写一个方法 def sep(path, add_sep_before=False, add_sep_after=False): """ 系统分隔符 Args: path: 路径列表,类型为数组 add_sep_before: 是否需要在拼接的路径前加一个分隔符 add_sep_after: 是否需要在拼接的路径后加一个分隔符

Returns:

"""
all_path = os.sep.join(path)
if add_sep_before:
    all_path = os.sep + all_path
if add_sep_after:
    all_path = all_path + os.sep
return all_path

我们再回到yaml_config.py,我们获取environment.yaml的绝对路径,就是项目目录加上environment.yaml在项目中的项目目录。最后修改的完整方法如下 import yaml from tools import get_project_path, sep

class GetConf: def init(self): project_dir = get_project_path() with open(project_dir + sep(['config', 'environment.yaml'], add_sep_before=True), "r") as env_file: self.env = yaml.load(env_file, Loader=yaml.FullLoader) print(self.env)

def get_username_password(self):
    return self.env["username"], self.env["password"]

if name == 'main': GetConf().get_username_password()

备考难度不低,所以相关培训课程都不便宜。如果决心要考,准备一段时间反复看文档、做实验是必须的,CKA 的学习曲线很陡峭,它更多靠的是个人自觉和毅力 class LeftMenuBase:

def level_one_menu(self, menu_name):
    """
    一级菜单
    :param menu_name:
    :return:
    """
    return "//aside[@class='el-aside']//span[text()='" + menu_name + "']/ancestor::li"

def level_two_menu(self, menu_name):
    """
    二级菜单
    :param menu_name:
    :return:
    """
    return "//aside[@class='el-aside']//span[text()='" + menu_name + "']/ancestor::li[1]"

我们来举一个场景的例子,我们之前有个用例,是进入到已买到的宝贝页面,然后依次点击页面上的按钮,比如”全部“、”待付款“、”待发货“、”运输中“等等,我们当时是通过一个list,然后循环来点击。我们也可以通过pytest.mark.parametrize来修改这个用例 from time import sleep

import pytest

from page.LeftMenuPage import LeftMenuPage from page.LoginPage import LoginPage from page.OrderPage import OrderPage

tab_list = ["全部", "待付款", "待发货", "运输中", "待确认", "待评价"]

class TestOrderBuy: @pytest.mark.parametrize("tab", tab_list) def test_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)

我们再来写一个用例,将我们的订单发布参数化 from time import sleep

import pytest

from page.LoginPage import LoginPage from page.LeftMenuPage import LeftMenuPage from page.GoodsPage import GoodsPage

goods_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": "提交" } ]

class TestParametrizeAddGoods: @pytest.mark.parametrize("goods_info", goods_info_list) def test_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,我们把可能的情况都写好 from common.tools import get_now_time from common.redis_operation import RedisOperation

class Process:

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"

def reset_all(self):
    # 删除所有进度
    self.redis_client.delete(self.UI_AUTOTEST_PROCESS)
    # 删除所有失败用例的名称
    self.redis_client.delete(self.FAILED_TESTCASE_NAMES)

def init_process(self, total):
    """
    初始化进度,包括总数、成功数、失败数、开始时间,运行状态
    :param total:
    :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)

def update_success(self):
    """
    成功用例个数+1
    Returns:

    """
    self.redis_client.hincrby(self.UI_AUTOTEST_PROCESS, "success")

def update_fail(self):
    """
    失败用例个数+1
    Returns:

    """
    self.redis_client.hincrby(self.UI_AUTOTEST_PROCESS, "fail")

def insert_into_fail_testcase_names(self, fail_testcase_name):
    """
    增加失败用例名称
    Returns:

    """
    self.redis_client.lpush(self.FAILED_TESTCASE_NAMES, fail_testcase_name)

def get_process(self):
    """
    获取进度,计算百分比
    Returns:

    """
    total, success, fail, _ = self.get_result()
    if total == 0:
        return 0
    else:
        result = "%.1f" % ((int(success) + int(fail)) / int(total) * 100) + "%"
        return result

def get_result(self):
    """
    获取测试结果
    Returns:

    """
    total = self.redis_client.hget(self.UI_AUTOTEST_PROCESS, "total")
    if total is None:
        total = 0
    success = self.redis_client.hget(self.UI_AUTOTEST_PROCESS, "success")
    if success is None:
        success = 0
    fail = self.redis_client.hget(self.UI_AUTOTEST_PROCESS, "fail")
    if fail is None:
        fail = 0
    start_time = self.redis_client.hget(self.UI_AUTOTEST_PROCESS, "start_time")
    if start_time is None:
        start_time = '-'
    return total, success, fail, start_time

def get_fail_testcase_names(self):
    """
    获取所有失败的用例名称
    Returns:

    """
    fail_testcase_names = self.redis_client.lrange(self.FAILED_TESTCASE_NAMES, 0, -1)
    return fail_testcase_names

def write_end_time(self):
    """
    把测试结束时间写入redis
    Returns:

    """
    self.redis_client.hset(self.UI_AUTOTEST_PROCESS, "end_time", get_now_time())

def write_jenkins_build_number(self, build_number):
    """
    把jenkins执行的build_number写入redis
    Args:
        build_number:

    Returns:

    """
    self.redis_client.hset(self.UI_AUTOTEST_PROCESS, "build_number", build_number)

def write_allure_report(self, report_url):
    """
    把jenkins执行的allure_report写入redis
    Args:
        report_url:

    Returns:

    """
    self.redis_client.hset(self.UI_AUTOTEST_PROCESS, "report_url", report_url)

def modify_running_status(self, status):
    """
    修改jenkins执行状态
    Args:
        status: 0为不在运行,1为正在运行

    Returns:

    """
    self.redis_client.set(self.RUNNING_STATUS, status)

从上面可以看出亲身经历了cka、ckad的证书学习获取的过程。考取证书需要对等的学习能力及付出相应的时间。并在工作中积累经验,证书考取相对不是那么简单。相当于k8s的运维的中级水平

点赞
收藏
评论区
推荐文章
荀勗 荀勗
6个月前
首个基于Transformer的分割检测+视觉大模型视频课程(附源码+课件)
参考资料地址1:https://pan.baidu.com/s/14g2VTg8JeeZ0pDey7xwGg提取码:2bmp参考资料地址2:https://share.weiyun.com/tnVNHGMD密码:3fj7iy众所周知,视觉系统对于理解和推理
荀勗 荀勗
6个月前
高性能多级网关与多级缓存架构落地实战(完结+附电子书)
参考资料地址1:https://pan.baidu.com/s/12w0TT26aywnoIcogPg8Uw提取码:uzf4参考资料地址2:https://share.weiyun.com/SNltUNLW密码:zi3dc7什么是网关?网关(Gateway
赵颜 赵颜
6个月前
一站式通关CKA证书-CKA教程(完结10章,基于k8s1.27版本)
学习地址1:https://pan.baidu.com/s/1ZRXwqCAftn58QFequHD4jA提取码:xs2i学习地址2:https://share.weiyun.com/2pn97By4密码:c58ghh一站式通关CKA证书Kubernete
笑面虎 笑面虎
6个月前
一站式通关CKA证书(23年新课,基于k8s1.27版本)
一站式通关CKA证书(23年新课,基于k8s1.27版本)分享一套CKA课程——一站式通关CKA证书,23年新课,基于k8s1.27版本,完整版10章,附源码PDF课件。CKA认证考试是由Linux基金会和云原生计算基金会(CNCF)创建的,以促进Kub
荀勗 荀勗
6个月前
[新版16章+电子书]SpringBoot+Vue3 项目实战,打造企业级在线办公系统
参考资料地址1:https://pan.baidu.com/s/1KmJP0OPD5P6iHlT7G1MIw提取码:4wyi参考资料地址2:https://share.weiyun.com/jVSDdcBU密码:cruqf9一个完整的在线办公系统具备哪些功
吉太 吉太
6个月前
[2023新版16章]SpringBoot+Vue3 项目实战,打造企业级在线办公系统
参考资料地址1:https://pan.baidu.com/s/1ZJGS0SA9pIUr76VUXioNSg提取码:95bd参考资料地址2:https://share.weiyun.com/jVSDdcBU密码:cruqf9SpringBootVue3
赵嬷嬷 赵嬷嬷
5个月前
[完结10章]Vue3+Pinia+Vite+TS 还原高性能外卖APP项目
参考资料地址1:https://pan.baidu.com/s/1u0uNBMkOA2NRk3N6myb4Zg提取码:tnlt参考资料地址2:https://share.weiyun.com/Wjw3QpeQ密码:gxrfcwVue3带来的改变,除了其自身
双寿 双寿
5个月前
大模型之最火Agent实战(打造你代理)教程
参考资料地址1:https://pan.baidu.com/s/1ymxhyeFjJX8DY3VeYJohg提取码:7k1q参考资料地址2:https://share.weiyun.com/olW8Mzf0密码:6bag56代理(Agent)指能自主感知环
双寿 双寿
5个月前
WPF高级实战课程《知产代理数字化解决方案》下载
参考资料地址1:https://pan.baidu.com/s/1ZlkRAbUu1mQE5JEAlbuTvw提取码:24b2参考资料地址2:https://share.weiyun.com/7RUYskT6密码:adbvfpWPF概念:WPF即Windo
吉太 吉太
4个月前
C++从0实现百万并发Reactor服务器[完结13章]
参考资料地址1:https://pan.baidu.com/s/10hWsc5kaC1uQGQpMsZsw提取码:xn6a参考资料地址2:https://share.weiyun.com/yAMzj8N9密码:viangd一、reactor是什么?怎么理解