Python 자동화 테스트 프레임워크인 Unittest를 사용하는 방법은 무엇입니까?
1unittest 프레임워크
unittest는 주로 다음과 같은 기능을 갖춘 Python용 단위 테스트 프레임워크입니다.
사용 사례 구성 및 실행 제공: 테스트 사례가 몇 개뿐인 경우에는 그럴 필요가 없습니다. 유스케이스의 구성을 고려하지만, 테스트케이스가 수백, 수천개에 이르게 되면 수많은 테스트케이스가 겹겹이 쌓여 확장성, 유지보수성 등의 문제가 발생하게 된다. 사용 사례의 구성. 단위 테스트 프레임워크는 이 문제를 해결하기 위해 존재합니다.
풍부한 비교 방법 제공: 유스 케이스가 실행된 후 실제 결과를 예상 결과(어설션)와 비교하여 유스 케이스가 원활하게 통과될 수 있는지 판단해야 합니다. 단위 테스트는 일반적으로 풍부한 어설션 방법을 제공합니다. 예를 들어 동등/부등, 포함/제외, True/False 등과 같은 어설션 방법이 있습니다.
풍부한 로그 제공: 테스트 케이스 실행에 실패하면 실패 이유를 명확하게 제시할 수 있으며, 모든 테스트 케이스가 실행되면 풍부한 실행 결과를 제공할 수 있습니다. 예를 들어 총 실행 시간, 실패한 사용 사례 수, 성공한 사용 사례 수 등이 있습니다.
유닛테스트에는 테스트 픽스처, 테스트 케이스, 테스트 스위트, 테스트 러너 네 가지 매우 중요한 개념이 있습니다.
Test Fixture
테스트 사례 환경의 구성 및 파괴는 setUp() 및 TearDown() 메서드를 재정의하여 수행되는 Fixture입니다.
setUp() 메서드를 사용하여 테스트할 브라우저의 드라이버를 얻는 등 테스트 환경을 설정할 수 있으며, 테스트 중에 데이터베이스에 액세스해야 하는 경우 데이터베이스 연결을 설정하여 초기화할 수 있습니다. 설정()에서.
tearDown() 메소드는 브라우저를 닫고, 데이터베이스 연결을 닫고, 데이터베이스에서 생성된 데이터를 지울 수 있는 환경을 파괴합니다. 테스트 케이스
TestCase 인스턴스는 테스트 케이스입니다. 테스트 케이스는 테스트 전 준비 환경 구축(setUp), 테스트 프로세스를 구현하기 위한 코드, 테스트 후 환경 복원(tearDown)을 포함한 완전한 테스트 프로세스입니다. 단위 테스트(단위 테스트)의 본질은 여기에 있습니다. 테스트 케이스는 특정 기능을 검증할 수 있는 완전한 테스트 단위입니다. 테스트 스위트
함수를 검증하려면 함께 실행할 수 있는 여러 테스트 케이스가 필요한 경우가 많습니다. 이로 인해 테스트 스위트 TestSuite라는 개념이 탄생하게 됩니다. 테스트 슈트는 여러 테스트 케이스를 함께 모으는 데 사용됩니다.
Test Runner 테스트 실행은 또한 단위 테스트 프레임워크에서 TextTestRunner 클래스가 제공하는 run() 메소드를 통해 실행되는 매우 중요한 개념입니다.
from selenium import webdriver import unittest import time import os from selenium.common.exceptions import NoAlertPresentException from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By class Baidu1(unittest.TestCase): def setUp(self): print("-----setUp-----") self.driver = webdriver.Chrome() self.url = "https://www.baidu.com/" self.driver.maximize_window() time.sleep(3) def tearDown(self): print("-----tearDown-----") self.driver.quit() def test_hao(self): print("111111111") driver = self.driver url = self.url driver.get(url) driver.find_element(By.LINK_TEXT,"hao123").click() time.sleep(6) def test_hbaidu(self): print("22222222") driver = self.driver url = self.url driver.get(url) driver.find_element(By.ID,"kw").send_keys("unittest") driver.find_element(By.ID,"su").submit() time.sleep(5) print(driver.title) # self.assertNotEqual(driver.title, "百度一下_百度搜索", msg="不相等") # self.assertTrue("beautiful"=="beauty", msg="Not Equal!") time.sleep(6) def saveScreenAsPhoto(self, driver, file_name): if not os.path.exists("./image"): os.makedirs("./image") now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time())) driver.get_screenshot_as_file("./image/" + now + "-" + file_name) time.sleep(3) print("3333333") if __name__ == "__main__": unittest.main()
이 스크립트의 Baidu1 클래스는 unittest.TestCase 클래스를 상속하므로 unittest 프레임워크를 사용하여 테스트 사례(TestCase)를 구성합니다.
setUp() 및 setDown()은 unittest 프레임워크의 테스트 펌웨어입니다.
test_로 시작하는 메소드는 테스트 메소드이며 전체 클래스를 실행할 때 기본적으로 실행됩니다.
unittest는 단위 테스트 모듈을 직접 실행할 수 있는 테스트 스크립트로 쉽게 전환할 수 있는 전역 main() 메서드를 제공합니다
. main() 메소드는 이 모듈에 포함된 "test"라는 이름의 모든 테스트 메소드를 검색하여 자동으로 실행합니다.
2 배치 실행 스크립트
2.1 테스트 스위트 구축
테스트된 함수와 해당 테스트 케이스를 추가한 후 실행을 위해 여러 테스트 케이스를 함께 구성해야 하며, 이를 위해서는 위에서 언급한 테스트 스위트 테스트 스위트
를 사용해야 합니다. testbaidu1.py와 testbaidu2.py
testbaidu2.py
from selenium import webdriver import unittest import time from selenium.common.exceptions import NoAlertPresentException from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By class Baidu2 (unittest.TestCase) : def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url = "http://www.baidu.com/" self.driver.maximize_window() self.verificationErrors=[] self.accept_next_alert = True def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) def test_hao(self): driver = self.driver driver.get(self.base_url) driver.find_element(By.LINK_TEXT,"新闻").click() time.sleep(6) self.assertTrue("123" == "1234", msg="not true") time.sleep(3) def test_baidusearch(self): driver = self.driver driver.get(self.base_url) driver.find_element(By.ID,"kw").clear() driver.find_element(By.ID,"kw").send_keys(u"unittest") driver.find_element(By.ID,"su").click() time.sleep(6) def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException as e: return False return True def is_alert_present(self): try: self.driver.switch_to.alert except NoAlertPresentException as e: return False return True def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to.alert alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True if __name__ == "__main__": unittest.main(verbosity=2)
addTest()
TestSuite 클래스의 addTest() 메소드는 다양한 테스트 클래스를 추가할 수 있습니다. 테스트 메소드는 테스트 스위트로 조립되지만 addTest는 두 개의 파일을 작성했다고 가정합니다. ()는 클래스에서 한 번에 하나의 테스트 메서드만 테스트 모음으로 조합할 수 있습니다. 방법은 다음과 같습니다.
testbaidu1.py 및 testbaidu2.py의 테스트 메소드를 테스트 스위트에 넣고 testsuite.py에 구현합니다.
testsuite.py
import unittest from testUnittest import testbaidu1 from testUnittest import testbaidu2 def createsuite(): #addTest suite = unittest.TestSuite() suite.addTest(testbaidu1.Baidu1("test_hao")) suite.addTest(testbaidu1.Baidu1("test_hbaidu")) suite.addTest(testbaidu2.Baidu2("test_hao")) suite.addTest(testbaidu2.Baidu2("test_baidusearch")) return suite if __name__=="__main__": suite = createsuite() runner = unittest.TextTestRunner(verbosity=2) runner.run(suite)
그러나 위의 접근 방식에는 두 가지 불편함이 있어 스크립트의 빠른 실행을 방해합니다. Testsuite.py는 매번 수정해야 합니다.
import testbaidu1과 같은 모든 관련 py 파일을 가져와야 합니다. , 각각의 새 스크립트를 추가하려면
addTest를 가져와야 합니다. py 파일에 테스트 메서드가 10개 있고 모두 테스트 모음으로 결합된 경우 다음을 수행해야 합니다. 10번 추가
makeSuite() 및 TestLoader ()
의 응용 프로그램은 단위 테스트 프레임워크에서 makeSuite() 메서드를 제공합니다. makeSuite는 단위 테스트가 makeSuite를 호출할 때 모든 테스트 사례로 구성된 테스트 스위트 TestSuite를 구현할 수 있습니다. , 테스트 클래스 이름만 전달하면 됩니다.
TestLoader는 클래스와 모듈에 대한 테스트 스위트를 생성하는 데 사용됩니다. 일반적으로 TestLoader().loadTestsFromTestCase(TestClass)는 테스트 클래스를 로드하는 데 사용됩니다.
runall.py
import unittest,csv import os,sys import time import testbaidu1 import testbaidu2 #手工添加案例到套件, def createsuite(): suite = unittest.TestSuite() #将测试用例加入到测试容器(套件)中 suite.addTest(unittest.makeSuite(testbaidu1.Baidu1)) suite.addTest(unittest.makeSuite(testbaidu2.Baidu2)) return suite ''' suite1 = unittest.TestLoader().loadTestsFromTestCase(testbaidu1.Baidu1) suite2 = unittest.TestLoader().loadTestsFromTestCase(testbaidu2.Baidu2) suite = unittest.TestSuite([suite1, suite2]) return suite ''' if __name__=="__main__": suite=createsuite() runner = unittest.TextTestRunner(verbosity=2) runner.run(suite)
makeSuite() 및 TestLoader() 도입 이후에는 클래스를 테스트하는 데 py 파일이 필요하지 않으며 한 번만 가져오면 됩니다.
discover() 애플리케이션
discover 是通过递归的方式到其子目录中从指定的目录开始, 找到所有测试模块并返回一个包含它们对象的TestSuite ,然后进行加载与模式匹配唯一的测试文件,discover 参数分别为discover(dir,pattern,top_level_dir=None)
runall.py—注意路径
import unittest,csv import os,sys import time #手工添加案例到套件, def createsuite(): discover=unittest.defaultTestLoader.discover("../testUnittest",pattern='test*.py',top_level_dir=None) print (discover) return discover if __name__=="__main__": suite=createsuite() runner = unittest.TextTestRunner(verbosity=2) runner.run(suite)
2.2 用例的执行顺序
unittest 框架默认加载测试用例的顺序是根据ASCII 码的顺序,数字与字母的顺序为: 0 ~ 9,A ~ Z,a ~ z 。
对于测试目录与测试文件来说, unittest 框架同样是按照这个规则来加载测试用例
2.3 忽略用例执行
语法:
@unittest.skip(u'The function was canceled, neglects to perform thecase')
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException import unittest, time, re class Baidu1(unittest.TestCase): #test fixture,初始化环境 def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url = "http://www.baidu.com/" self.verificationErrors = [] self.accept_next_alert = True @unittest.skip("skipping") def test_baidusearch(self): driver = self.driver driver.get(self.base_url + "/") driver.find_element(By.ID,"kw").click() driver.find_element(By.ID,"kw").clear() driver.find_element(By.ID,"kw").send_keys(u"测试") driver.find_element(By.ID,"su").click() driver.find_element(By.ID,"su").click() def test_hao(self): driver = self.driver driver.get(self.base_url + "/") driver.find_element(By.LINK_TEXT,"hao123").click() self.assertEqual(u"hao123_上网从这里开始", driver.title) #判断element是否存在,可删除 def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException as e: return False return True #判断alert是否存在,可删除 def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException as e: return False return True #关闭alert,可删除 def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True #test fixture,清除环境 def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) if __name__ == "__main__": #执行用例 unittest.main()
3 unittest断言
自动化的测试中, 对于每个单独的case来说,一个case的执行结果中, 必然会有期望结果与实际结果, 来判断该case是通过还是失败, 在unittest 的库中提供了大量的实用方法来检查预期值与实际值, 来验证case的结果, 一般来说, 检查条件大体分为等价性, 逻辑比较以及其他, 如果给定的断言通过, 测试会继续执行到下一行的代码, 如果断言失败, 对应的case测试会立即停止或者生成错误信息( 一般打印错误信息即可) ,但是不要影响其他的case执行。
unittest 的单元测试库提供了标准的xUnit 断言方法。下面是一些常用的断言
断言方法 | 断言描述 |
---|---|
assertEqual(arg1, arg2, msg=None) | 验证arg1=arg2,不等则fail |
assertNotEqual(arg1, arg2, msg=None) | 验证arg1 != arg2, 相等则fail |
assertTrue(expr, msg=None) | 验证expr是true,如果为false,则fail |
assertFalse(expr,msg=None) | 验证expr是false,如果为true,则fail |
assertIs(arg1, arg2, msg=None) | 验证arg1、arg2是同一个对象,不是则fail |
assertIsNot(arg1, arg2, msg=None) | 验证arg1、arg2不是同一个对象,是则fail |
assertIsNone(expr, msg=None) | 验证expr是None,不是则fail |
assertIsNotNone(expr, msg=None) | 验证expr不是None,是则fail |
assertIn(arg1, arg2, msg=None) | 验证arg1是arg2的子串,不是则fail |
assertNotIn(arg1, arg2, msg=None) | 验证arg1不是arg2的子串,是则fail |
assertIsInstance(obj, cls, msg=None) | 验证obj是cls的实例,不是则fail |
assertNotIsInstance(obj, cls,msg=None) | 验证obj不是cls的实例,是则fail |
4 HTML报告生成
脚本执行完毕之后,还需要看到HTML报告,下面我们就通过HTMLTestRunner.py 来生成测试报告。
修改runall.py
import unittest,csv import os,sys import time import HTMLTestRunner #手工添加案例到套件, def createsuite(): discover=unittest.defaultTestLoader.discover('../testUnittest',pattern='test*.py',top_level_dir=None) print (discover) return discover if __name__=="__main__": curpath=sys.path[0] #取当前时间 now=time.strftime("%Y-%m-%d-%H %M %S",time.localtime(time.time())) if not os.path.exists(curpath+'/resultreport'): os.makedirs(curpath+'/resultreport') filename=curpath+'/resultreport/'+now+'resultreport.html' with open(filename,'wb') as fp: #出html报告 runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'测试报告',description=u'用例执行情况',verbosity=2) suite=createsuite() runner.run(suite)
5 异常捕捉与错误截图
用例不可能每一次运行都成功,肯定运行时候有不成功的时候。如果可以捕捉到错误,并且把错误截图保存,这将是一个非常棒的功能,也会给我们错误定位带来方便。
例如编写一个函数,关键语句为driver.get_screenshot_as_file:
def savescreenshot(self,driver,file_name): if not os.path.exists('./image'): os.makedirs('./image') now=time.strftime("%Y%m%d-%H%M%S",time.localtime(time.time())) #截图保存 driver.get_screenshot_as_file('./image/'+now+'-'+file_name) time.sleep(1)
示例:testscreenshot.py
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException import unittest, time, re import os class Baidu1(unittest.TestCase): #test fixture,初始化环境 def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url = "http://www.baidu.com/" self.verificationErrors = [] self.accept_next_alert = True #测试用例,必须以test开头 def test_hao(self): driver = self.driver driver.get(self.base_url + "/") driver.find_element(By.LINK_TEXT,"hao123").click() time.sleep(2) try: self.assertEqual(u'hao_上网从这里开始', driver.title) except: self.savescreenshot(driver,'hao.png') #判断element是否存在,可删除 def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException as e: return False return True #判断alert是否存在,可删除 def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException as e: return False return True #关闭alert,可删除 def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True #test fixture,清除环境 def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) def savescreenshot(self,driver,file_name): if not os.path.exists('./image'): os.makedirs('./image') now=time.strftime("%Y%m%d-%H%M%S",time.localtime(time.time())) #截图保存 driver.get_screenshot_as_file('./image/'+now+'-'+file_name) time.sleep(1) if __name__ == "__main__": #执行用例 unittest.main() ''' 可以增加verbosity参数,例如unittest.main(verbosity=2) 在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。 这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值: 0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80 1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F” 2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息 '''
6 数据驱动
之前我们的case都是数据和代码在一起编写。考虑如下场景:
需要多次执行一个案例,比如baidu搜索,分别输入中文、英文、数字等进行搜索,这时候需要编写3个案例吗?有没有版本一次运行?
python 的unittest 没有自带数据驱动功能。所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成。
ddt的安装:
pip install ddt
python setup.py install
dd.ddt:
装饰类,也就是继承自TestCase的类。
ddt.data:
装饰测试方法。参数是一系列的值。
data(value) 一次性传入一个参数data(value1,value2,…) 一次性传入多个参数,需要用@unpack映射data(*解析数据的方法(txt/csv文件))
ddt.file_data:
装饰测试方法。参数是文件名。文件可以是json 或者 yaml类型。
注意,如果文件以”.yml”或者”.yaml”结尾,ddt会作为yaml类型处理,其他所有文件都会作为json文件处理。
如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。
如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。
ddt.unpack:
传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上。字典也可以这样处理。
Testddt.py:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException import unittest, time, re import os,sys,csv from ddt import ddt, data, unpack ,file_data def getCsv(file_name): rows=[] path=sys.path[0].replace('\testddt','') print (path) with open(path+'/data/'+file_name,'r+b') as f: readers=csv.reader(f,delimiter=',',quotechar='|') next(readers,None) for row in readers: temprows=[] for i in row: temprows.append(i.decode('gbk')) rows.append(temprows) return rows #引入ddt @ddt class Testddt(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url = "http://www.baidu.com" self.verificationErrors = [] self.accept_next_alert = True #测试用例,必须以test开头 #增加ddt数据 @data('selenium','unittest','Junit') #@data(2,3,4) #单变更时不使用unpack #@data([3, 2], [4, 3], [5, 3]) # @data(*getCsv('test_baidu_data.csv')) #使用file_data需要在cmd窗口下运行,否则找不到文件 #@file_data('test_data_list.json') # @unpack def test_hao(self,value,expected_value): # def test_hao(self,value): driver = self.driver driver.get(self.base_url + "/") driver.find_element(By.ID,"kw").clear() driver.find_element(By.ID,"kw").send_keys(value) driver.find_element(By.ID,"su").click() time.sleep(2) self.assertEqual(expected_value, driver.title) print (expected_value) print (driver.title) #判断element是否存在,可删除 def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException as e: return False return True #判断alert是否存在,可删除 def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException as e: return False return True #关闭alert,可删除 def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True #test fixture,清除环境 def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) def savescreenshot(self,driver,file_name): if not os.path.exists('./image'): os.makedirs('./image') now=time.strftime("%Y%m%d-%H%M%S",time.localtime(time.time())) #截图保存 driver.get_screenshot_as_file('./image/'+now+'-'+file_name) time.sleep(1) if __name__ == "__main__": #执行用例 unittest.main()
위 내용은 Python 자동화 테스트 프레임워크인 Unittest를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

CentOS 시스템에서 Pytorch 모델을 효율적으로 교육하려면 단계가 필요 하며이 기사는 자세한 가이드를 제공합니다. 1. 환경 준비 : 파이썬 및 종속성 설치 : CentOS 시스템은 일반적으로 파이썬을 사전 설치하지만 버전은 더 오래 될 수 있습니다. YUM 또는 DNF를 사용하여 Python 3 및 Upgrade Pip : Sudoyumupdatepython3 (또는 SudodnfupdatePython3), PIP3INSTALL-UPGRADEPIP를 설치하는 것이 좋습니다. CUDA 및 CUDNN (GPU 가속도) : NVIDIAGPU를 사용하는 경우 Cudatool을 설치해야합니다.

CentOS 시스템에서 Pytorch GPU 가속도를 활성화하려면 Cuda, Cudnn 및 GPU 버전의 Pytorch를 설치해야합니다. 다음 단계는 프로세스를 안내합니다. CUDA 및 CUDNN 설치 CUDA 버전 호환성 결정 : NVIDIA-SMI 명령을 사용하여 NVIDIA 그래픽 카드에서 지원하는 CUDA 버전을보십시오. 예를 들어, MX450 그래픽 카드는 CUDA11.1 이상을 지원할 수 있습니다. Cudatoolkit 다운로드 및 설치 : NVIDIACUDATOOLKIT의 공식 웹 사이트를 방문하여 그래픽 카드에서 지원하는 가장 높은 CUDA 버전에 따라 해당 버전을 다운로드하여 설치하십시오. CUDNN 라이브러리 설치 :

Docker는 Linux 커널 기능을 사용하여 효율적이고 고립 된 응용 프로그램 실행 환경을 제공합니다. 작동 원리는 다음과 같습니다. 1. 거울은 읽기 전용 템플릿으로 사용되며, 여기에는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함합니다. 2. Union 파일 시스템 (Unionfs)은 여러 파일 시스템을 스택하고 차이점 만 저장하고 공간을 절약하고 속도를 높입니다. 3. 데몬은 거울과 컨테이너를 관리하고 클라이언트는 상호 작용을 위해 사용합니다. 4. 네임 스페이스 및 CGroup은 컨테이너 격리 및 자원 제한을 구현합니다. 5. 다중 네트워크 모드는 컨테이너 상호 연결을 지원합니다. 이러한 핵심 개념을 이해 함으로써만 Docker를 더 잘 활용할 수 있습니다.

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

Centos에서 Pytorch 버전을 선택할 때 다음과 같은 주요 요소를 고려해야합니다. 1. Cuda 버전 호환성 GPU 지원 : NVIDIA GPU가 있고 GPU 가속도를 사용하려면 해당 CUDA 버전을 지원하는 Pytorch를 선택해야합니다. NVIDIA-SMI 명령을 실행하여 지원되는 CUDA 버전을 볼 수 있습니다. CPU 버전 : GPU가 없거나 GPU를 사용하지 않으려면 Pytorch의 CPU 버전을 선택할 수 있습니다. 2. 파이썬 버전 Pytorch

Minio Object Storage : Centos System Minio 하의 고성능 배포는 Go Language를 기반으로 개발 한 고성능 분산 객체 저장 시스템입니다. Amazons3과 호환됩니다. Java, Python, JavaScript 및 Go를 포함한 다양한 클라이언트 언어를 지원합니다. 이 기사는 CentOS 시스템에 대한 Minio의 설치 및 호환성을 간단히 소개합니다. CentOS 버전 호환성 Minio는 다음을 포함하되 이에 국한되지 않는 여러 CentOS 버전에서 확인되었습니다. CentOS7.9 : 클러스터 구성, 환경 준비, 구성 파일 설정, 디스크 파티셔닝 및 미니를 다루는 완전한 설치 안내서를 제공합니다.

Centos Nginx를 설치하려면 다음 단계를 수행해야합니다. 개발 도구, PCRE-DEVEL 및 OPENSSL-DEVEL과 같은 종속성 설치. nginx 소스 코드 패키지를 다운로드하고 압축을 풀고 컴파일하고 설치하고 설치 경로를/usr/local/nginx로 지정하십시오. nginx 사용자 및 사용자 그룹을 만들고 권한을 설정하십시오. 구성 파일 nginx.conf를 수정하고 청취 포트 및 도메인 이름/IP 주소를 구성하십시오. Nginx 서비스를 시작하십시오. 종속성 문제, 포트 충돌 및 구성 파일 오류와 같은 일반적인 오류는주의를 기울여야합니다. 캐시를 켜고 작업자 프로세스 수 조정과 같은 특정 상황에 따라 성능 최적화를 조정해야합니다.
